home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / rbbs_pc / 173abas.zip / CONFIG.BAS < prev    next >
BASIC Source File  |  1990-08-26  |  161KB  |  4,205 lines

  1.       ' $linesize: 132
  2.       ' $title:  'CONFIG 17.3A, Copyright 1983-90 by D. Thomas Mack' ' DA081003
  3.       ' WARNING !!! DO NOT CHANGE, BYPASS OR REMOVE LINE 10000-10230
  4. 10000 ' CONFIG.BAS (RBBS-PC VERSION 17.3A)                           ' DA081003
  5.       ' by D.Thomas Mack
  6.       '   The Second Ring
  7.       '   39 Cranbury Dr.
  8.       '   Trumbull, CT. 06611
  9.       '
  10.       ' *******************************NOTICE**********************************
  11.       ' *  A limited license is granted to all users of this program and it's *
  12.       ' *  companion program, RBBS-PC (ver. 17.3A), to make copies of this    *
  13.       ' *  program and distribute the copies to other users, on the following *
  14.       ' *  conditions                                                         *
  15.       ' *   1.   The copyright notices contained within this program are not  *
  16.       ' *        altered, bypassed, or removed.                               *
  17.       ' *   2.   The program is not to be disrtibuted to others in modified   *
  18.       ' *        form (i.e. the line numbers must remain the same).           *
  19.       ' *   3.   No fee is charged (or any other consideration received)      *
  20.       ' *        for coping or distributing these programs without an express *
  21.       ' *        written agreement with D. Thomas Mack, The Second Ring,      *
  22.       ' *        39 Cranbury Dr., Trumbul, CT. 06611                          *
  23.       ' *                                                                     *
  24.       ' *      Copyright (c) 1983-1990 D. Thomas Mack, The Second Ring        *
  25.       ' ***********************************************************************
  26. '     $INCLUDE: 'CNFG-VAR.BAS'
  27.       CLEAR
  28. '
  29. ' ****************************************************************************
  30. ' *  DISPLAY THE CONFIG TITLE PAGE
  31. ' ****************************************************************************
  32. '
  33.       WIDTH 80
  34.       CLS
  35.       NOT.YET.IN$ = "[Not Implemented]"  ' Msg used in config for parm not yet implemented
  36.       NONE.PICKED$ = "<none>"    ' Standardized message
  37.       NUM.FILES = 8
  38.       NUM.GLOBAL = 4
  39.       NUM.MAIN = 18
  40.       NUM.SYSOP = 7
  41.       NUM.UTILITY = 12
  42.       NUM.LIBRARY = 7
  43.       VERSION.NUMBER$ = "17.3A"
  44.       I! = FRE(C$)
  45.       KEY OFF
  46.       CALL CNFGINIT
  47.       PRINT TAB(60)"tm"
  48.       PRINT TAB(16) STRING$(15,205)" U S E R W A R E "STRING$(15,205)
  49.       PRINT
  50.       PRINT TAB(17)"Capital PC User Group User-Supported Software"
  51.       PRINT
  52.       X$ = "    "
  53.       PRINT "Copyright (c) 1983-1990 D. Thomas Mack, 39 Cranbury Dr., Trumbull, CT. 06611"
  54.       PRINT
  55.       PRINT X$;"    If you use RBBS-PC " + CONFIG.VERSION$ + " and find"
  56.       PRINT X$;"    it valuable, consider contributing to"
  57.       PRINT ""
  58.       PRINT X$;"                 Capital PC Software Exchange"
  59.       PRINT X$;"                     Post Office Box 6128"
  60.       PRINT X$;"                Silver Spring, Maryland  20906"
  61.       PRINT
  62.       PRINT X$;"    You are free to copy and share RBBS-PC provided"
  63.       PRINT X$;"      1.  This program is not distributed in modified form."
  64.       PRINT X$;"      2.  No fee or consideration is charged for RBBS-PC itself."
  65. 10230 PRINT X$;"      3.  This notice is not bypassed or removed."
  66.       PRINT
  67. '
  68. ' *  DEFINE THE FUNCTIONS USED BY CONFIG
  69. '
  70.       DEF FNTI! = CSNG(FIX((VAL(MID$(TIME$,1,2)) * 60 * 60) _
  71.                          + (VAL(MID$(TIME$,4,2)) * 60) _
  72.                          + (VAL(MID$(TIME$,7,2)) * 1)))
  73.       DEF FNHSH(X$) = ((ASC(X$) * 100  _
  74.                          + ASC(MID$(X$,(LEN(X$)/2) + .1,1)) * 10  _
  75.                          + ASC(RIGHT$(X$,1))) MOD MAX.USR.FILE.SIZE.FRM.DEF) + 1
  76.       DEF FNHSH2(X$) = (ASC(MID$(X$,2,1)) * 10 + 7) MOD MAX.USR.FILE.SIZE.FRM.DEF
  77.       DELAY! = FNTI! + 5
  78. 10480 GOSUB 60440
  79. 10490 LOCATE 22,15
  80.       PRINT SPC(64)
  81.       NODE.ID$ = ""
  82.       IF COMMAND$ <> "" THEN _
  83.         CONFIG.FILENAME$ = COMMAND$: _
  84.         GOTO 10530
  85.       CONFIG.FILENAME$ = "RBBS-PC.DEF"
  86.       CALL GETNUMYN ("Will you be running multiple copies of RBBS-PC",AB)
  87.       IF NOT AB THEN _
  88.          GOTO 10530
  89. 10510 GOSUB 22480
  90. '
  91. ' * CHECK TO SEE IF AN EXISTING "RBBS-PC.DEF" FILE EXISTS
  92. '
  93. 10530 ON ERROR GOTO 60010
  94.       FILE$ = CONFIG.FILENAME$
  95.       GOSUB 30000
  96.       M$ = "Z"
  97.       NO.DEF.FILE = FALSE
  98.       SUBBOARD = FALSE
  99.       IF OKAY THEN _
  100.          CALL CNFGINIT : _
  101.          GOTO 10536
  102.       IF LEN(CONFIG.FILENAME$) > 7 OR _
  103.          INSTR(CONFIG.FILENAME$,".") <> 0 THEN _
  104.          GOTO 10531
  105.       FILE$ = FILE$ + "C.DEF"
  106.       GOSUB 30000
  107.       IF OKAY THEN _
  108.          CALL CNFGINIT : _
  109.          CONFIG.FILENAME$ = FILE$ : _
  110.          GOTO 10536
  111.       CALL GETNUMYN ("Are you setting up a 'sub-board'",AB)
  112.       IF NOT AB THEN _
  113.          GOTO 10531
  114.       SUBBOARD = TRUE
  115.       BASE.NAME$ = CONFIG.FILENAME$
  116.       CONFIG.FILENAME$   = CONFIG.FILENAME$+"C.DEF"
  117. 10531 A$ = "Configuration file " + CONFIG.FILENAME$ + " not found.  Create new one"
  118.       CALL GETNUMYN (A$,AB)
  119.       IF NOT AB THEN _
  120.          SYSTEM
  121. 10532 X$ = "default location for RBBS files"
  122.       GOSUB 15205
  123.       DD$ = HJ$
  124.       CALL CNFGINIT
  125.       GOSUB 15790
  126.       BULLETIN.MENU$ = DRIVE.FOR.BULLETINS$ + _
  127.                        BULLETIN.MENU$
  128.       BULLETIN.PREFIX$ = DRIVE.FOR.BULLETINS$ + _
  129.                          BULLETIN.PREFIX$
  130.       NO.DEF.FILE = TRUE
  131.       GOTO 11710
  132. 10536 OPEN "I",#1,CONFIG.FILENAME$
  133. '
  134. ' * READ IN THE PARAMETERS FROM AN EXISTING "RBBS-PC.DEF" FILE
  135. '
  136. 11600 INPUT #1,CONFIG.FILE.VER$, _
  137.                DOWNLOAD.DRIVES$, _
  138.                SYSOP.PASSWORD.1$, _
  139.                SYSOP.PASSWORD.2$, _
  140.                SYSOP.FIRST.NAME$, _
  141.                SYSOP.LAST.NAME$, _
  142.                REQUIRED.RINGS, _
  143.                START.OFFICE.HOURS, _
  144.                END.OFFICE.HOURS, _
  145.                MINUTES.PER.SESSION!, _
  146.                MAX.ALLOWED.MSGS.FRM.DEF, _
  147.                ACT.MNTHS.B4.DELETING, _
  148.                UPLOAD.DIRECTORY$, _
  149.                EXPERT.USER, _
  150.                ACTIVE.BULLETINS, _
  151.                PROMPT.BELL, _
  152.                PCJR, _
  153.                MENUS.CAN.PAUSE, _
  154.                MENU$(1), _
  155.                MENU$(2), _
  156.                MENU$(3), _
  157.                MENU$(4), _
  158.                MENU$(5), _
  159.                MENU$(6), _
  160.                CONFERENCE.MENU$, _
  161.                CONFERENCE.VIEWER.SEC.LVL, _
  162.                WELCOME.INTERRUPTABLE, _
  163.                REMIND.FILE.TRANSFERS, _
  164.                PAGE.LENGTH, _
  165.                MAX.MESSAGE.LINES, _
  166.                DOORS.AVAILABLE, _
  167.                MO$
  168.       IF CONFIG.FILE.VER$ > VERSION.NUMBER$ OR _
  169.          CONFIG.FILE.VER$ < "17.1A" THEN _
  170.          PRINT "Config DEF file, " + CONFIG.FILENAME$ + " not " + CONFIG.VERSION$ : _
  171.          END
  172.       GOSUB 22340
  173. 11620 INPUT #1,MAIN.MESSAGE.FILE$, _
  174.                MAIN.MESSAGE.BACKUP$, _
  175.                CALLERS.FILE$, _
  176.                COMMENTS.FILE$, _
  177.                MAIN.USER.FILE$, _
  178.                WELCOME.FILE$, _
  179.                NEWUSER.FILE$, _
  180.                DIRECTORY.EXTENTION$, _
  181.                COM.PORT$, _
  182.                BULLETINS.OPTIONAL, _
  183.                USER.INIT.COMMAND$, _
  184.                RTS$, _
  185.                DOS.VERSION, _
  186.                FG, _
  187.                BG, _
  188.                BORDER, _
  189.                RBBS.BAT$, _
  190.                RCTTY.BAT$
  191.       GOSUB 22340
  192. 11640 INPUT #1,OMIT.MAIN.DIRECTORY$, _
  193.                FIRST.NAME.PROMPT$, _
  194.                HELP$(3), _
  195.                HELP$(4), _
  196.                HELP$(7), _
  197.                HELP$(9), _
  198.                BULLETIN.MENU$, _
  199.                BULLETIN.PREFIX$, _
  200.                DRIVE.FOR.BULLETINS$, _
  201.                MESSAGE.REMINDER, _
  202.                REQUIRE.NON.ASCII, _
  203.                ASK.EXTENDED.DESC, _
  204.                MAXIMUM.NUMBER.OF.NODES, _
  205.                NETWORK.TYPE, _
  206.                RECYCLE.TO.DOS, _
  207.                MAX.USR.FILE.SIZE.FRM.DEF, _
  208.                MAX.MSG.FILE.SIZE.FRM.DEF!, _
  209.                TRASHCAN.FILE$
  210.       DONT.ASK = TRUE
  211.       GOSUB 21895
  212.       DONT.ASK = FALSE
  213.       GOSUB 22340
  214. 11660 INPUT #1,MINIMUM.LOGON.SECURITY, _
  215.                DEFAULT.SECURITY.LEVEL, _
  216.                SYSOP.SECURITY.LEVEL, _
  217.                FILESEC.FILE$, _
  218.                SYSOP.MENU.SECURITY.LEVEL, _
  219.                CONFMAIL.LIST$, _
  220.                MAXIMUM.VIOLATIONS, _
  221.                SYSOP.FUNCTION(1), _
  222.                SYSOP.FUNCTION(2), _
  223.                SYSOP.FUNCTION(3), _
  224.                SYSOP.FUNCTION(4), _
  225.                SYSOP.FUNCTION(5), _
  226.                SYSOP.FUNCTION(6), _
  227.                SYSOP.FUNCTION(7), _
  228.                PASSWORD.FILE$, _
  229.                MAXIMUM.PASSWORD.CHANGES, _
  230.                MINIMUM.SECURITY.FOR.TEMP.PASSWORD, _
  231.                OVERWRITE.SECURITY.LEVEL, _
  232.                DOORS.TERMINAL.TYPE, _
  233.                MAX.PER.DAY
  234.       GOSUB 22340
  235. 11680 INPUT #1,MAIN.FUNCTION(1), _
  236.                MAIN.FUNCTION(2), _
  237.                MAIN.FUNCTION(3), _
  238.                MAIN.FUNCTION(4), _
  239.                MAIN.FUNCTION(5), _
  240.                MAIN.FUNCTION(6), _
  241.                MAIN.FUNCTION(7), _
  242.                MAIN.FUNCTION(8), _
  243.                MAIN.FUNCTION(9), _
  244.                MAIN.FUNCTION(10), _
  245.                MAIN.FUNCTION(11), _
  246.                MAIN.FUNCTION(12), _
  247.                MAIN.FUNCTION(13), _
  248.                MAIN.FUNCTION(14), _
  249.                MAIN.FUNCTION(15), _
  250.                MAIN.FUNCTION(16), _
  251.                MAIN.FUNCTION(17), _
  252.                MAIN.FUNCTION(18), _
  253.                MIN.NEWCALLER.BAUD, _
  254.                WAIT.BEFORE.DISCONNECT
  255.       GOSUB 22340
  256. 11700 INPUT #1,FILES.FUNCTION(1), _
  257.                FILES.FUNCTION(2), _
  258.                FILES.FUNCTION(3), _
  259.                FILES.FUNCTION(4), _
  260.                FILES.FUNCTION(5), _
  261.                FILES.FUNCTION(6), _
  262.                FILES.FUNCTION(7), _
  263.                FILES.FUNCTION(8), _
  264.                UTILITY.FUNCTION(1), _
  265.                UTILITY.FUNCTION(2), _
  266.                UTILITY.FUNCTION(3), _
  267.                UTILITY.FUNCTION(4), _
  268.                UTILITY.FUNCTION(5), _
  269.                UTILITY.FUNCTION(6), _
  270.                UTILITY.FUNCTION(7), _
  271.                UTILITY.FUNCTION(8), _
  272.                UTILITY.FUNCTION(9), _
  273.                UTILITY.FUNCTION(10), _
  274.                UTILITY.FUNCTION(11), _
  275.                UTILITY.FUNCTION(12), _
  276.                GLOBAL.FUNCTION(1), _
  277.                GLOBAL.FUNCTION(2), _
  278.                GLOBAL.FUNCTION(3), _
  279.                GLOBAL.FUNCTION(4), _
  280.                UPLOAD.TIME.FACTOR!, _
  281.                COMPUTER.TYPE, _
  282.                REMIND.PROFILE, _
  283.                RBBS.NAME$, _
  284.                COMMANDS.BETWEEN.RINGS, _
  285.                DF, _
  286.                PAGING.PRINTER.SUPPORT$, _
  287.                MODEM.INIT.BAUD$
  288.       GOSUB 22340
  289. 11705 INPUT #1,TURN.PRINTER.OFF, _
  290.                DIRECTORY.PATH$, _
  291.                MIN.SEC.TO.VIEW, _
  292.                LIMIT.SEARCH.TO.FMS, _
  293.                DEFAULT.CATEGORY.CODE$, _
  294.                DIR.CATEGORY.FILE$, _
  295.                NEW.FILES.CHECK, _
  296.                MAX.DESC.LEN, _
  297.                SHOW.SECTION, _
  298.                COMMANDS.IN.PROMPT, _
  299.                NEWUSER.SETS.DEFAULTS, _
  300.                HELP.PATH$, _
  301.                HELP.EXTENSION$, _
  302.                MAIN.COMMANDS$, _
  303.                FILE.COMMANDS$, _
  304.                UTIL.COMMANDS$, _
  305.                GLOBAL.COMMANDS$, _
  306.                SYSOP.COMMANDS$
  307.       GOSUB 22340
  308. 11706 INPUT #1,RECYCLE.WAIT, _
  309.                LIBRARY.FUNCTION(1), _
  310.                LIBRARY.FUNCTION(2), _
  311.                LIBRARY.FUNCTION(3), _
  312.                LIBRARY.FUNCTION(4), _
  313.                LIBRARY.FUNCTION(5), _
  314.                LIBRARY.FUNCTION(6), _
  315.                LIBRARY.FUNCTION(7), _
  316.                LIBRARY.DRIVE$, _
  317.                LIBRARY.DIRECTORY.PATH$, _
  318.                LIBRARY.DIRECTORY.EXTENTION$, _
  319.                LIBRARY.WORK.DISK.PATH$, _
  320.                LIBRARY.MAX.DISK, _
  321.                LIBRARY.MAX.DIRECTORY, _
  322.                LIBRARY.MAX.SUBDIR, _
  323.                LIBRARY.SUBDIR.PREFIX$, _
  324.                LIBRARY.ARCHIVE.PATH$, _
  325.                LIBRARY.ARCHIVE.PROGRAM$, _
  326.                LIBRARY.COMMANDS$
  327.       GOSUB 22340
  328.       INPUT #1,UPLOAD.PATH$, _
  329.                FMS.DIRECTORY$, _
  330.                ANS.MENU$,_
  331.                REQUIRED.QUESTIONNAIRE$,_
  332.                REMEMBER.NEW.USERS, _
  333.                SURVIVE.NOUSER.ROOM, _
  334.                PROMPT.HASH$, _
  335.                START.HASH, _
  336.                LEN.HASH, _
  337.                PROMPT.INDIV$, _
  338.                START.INDIV, _
  339.                LEN.INDIV
  340.       GOSUB 22340
  341.       INPUT #1,BYPASS.MSGS, _
  342.                MUSIC, _
  343.                RESTRICT.BY.DATE, _
  344.                DAYS.TO.WARN, _
  345.                DAYS.IN.SUBSCRIPTION.PERIOD, _
  346.                VOICE.TYPE, _
  347.                RESTRICT.VALID.CMDS, _
  348.                NEW.USER.DEFAULT.MODE, _
  349.                NEW.USER.LINE.FEEDS, _
  350.                NEW.USER.NULLS, _
  351.                FAST.FILE.LIST$, _
  352.                FAST.FILE.LOCATOR$, _
  353.                MESSAGES.CAN.GROW, _
  354.                WRAP.CALLERS.FILE$, _
  355.                REDIRECT.IO.METHOD, _
  356.                AUTO.UPGRADE.SEC, _
  357.                HALT.ON.ERROR, _
  358.                NEW.PUBLIC.MSGS.SECURITY, _
  359.                NEW.PRIVATE.MSGS.SECURITY, _
  360.                SECURITY.NEEDED.TO.CHANGE.MSGS, _
  361.                SL.CATEGORIZE.UPLOADS, _
  362.                BAUDOT, _
  363.                TIME.TO.DROP.TO.DOS, _
  364.                EXPIRED.SECURITY, _
  365.                DTR.DROP.DELAY, _
  366.                ASK.IDENTITY, _
  367.                MAX.REG.SEC, _
  368.                BUFFER.SIZE, _
  369.                MLCOM, _
  370.                SHOOT.YOURSELF, _
  371.                EXTENSION.LIST$, _
  372.                NEW.USER.DEFAULT.PROTOCOL$, _
  373.                NEW.USER.GRAPHICS$, _
  374.                NET.MAIL$, _
  375.                MASTER.DIRECTORY.NAME$, _
  376.                PROTO.DEF$, _
  377.                UPCAT.HELP$, _
  378.                ALWAYS.STREW.TO$, _
  379.                LAST.NAME.PROMPT$
  380.       GOSUB 22340
  381.       INPUT #1,PERSONAL.DRVPATH$, _
  382.                PERSONAL.DIR$, _
  383.                PERSONAL.BEGIN, _
  384.                PERSONAL.LEN, _
  385.                PERSONAL.PROTOCOL$, _
  386.                PERSONAL.CONCAT , _
  387.                PRIVATE.READ.SEC, _
  388.                PUBLIC.READ.SEC, _
  389.                SEC.CHANGE.MSG, _
  390.                KEEP.INIT.BAUD, _
  391.                MAIN.PUI$, _
  392.                DEFAULT.ECHOER$, _
  393.                HOST.ECHO.ON$, _
  394.                HOST.ECHO.OFF$, _
  395.                SWITCH.BACK, _
  396.                DEFAULT.LINE.ACK$, _
  397.                ALTDIR.EXTENSION$, _
  398.                DIRECTORY.PREFIX$
  399.       GOSUB 22340
  400.       INPUT #1,SEC.LVL.EXEMPT.FRM.PURGING, _
  401.                MODEM.INIT.WAIT.TIME, _
  402.                MODEM.COMMAND.DELAY.TIME, _
  403.                TURBO.RBBS
  404.       GOSUB 22340
  405. 11707 INPUT #1,DNLD.SUB, _
  406.                WILL.SUBDIRS.B.USED, _
  407.                UPLOAD.TO.SUBDIR, _
  408.                DOWNLOAD.TO.SUBDIR, _
  409.                UPLOAD.SUBDIR$, _
  410.                MIN.OLDCALLER.BAUD, _
  411.                MAX.WORK.VAR, _
  412.                DISKFULL.GO.OFFLINE, _
  413.                EXTENDED.LOGGING, _
  414.                USER.RESET.COMMAND$, _
  415.                USER.COUNT.RINGS.COMMAND$, _
  416.                USER.ANSWER.COMMAND$, _
  417.                USER.GO.OFFHOOK.COMMAND$, _
  418.                DISK.FOR.DOS$, _
  419.                DUMB.MODEM, _
  420.                COMMENTS.AS.MESSAGES, _
  421.                LSB, _
  422.                MSB, _
  423.                LINE.CONTROL.REGISTER, _
  424.                MODEM.CONTROL.REGISTER, _
  425.                LINE.STATUS.REGISTER, _
  426.                MODEM.STATUS.REGISTER
  427.       GOSUB 22340
  428.       INPUT #1,KEEP.TIME.CREDITS, _
  429.                XON.XOFF, _
  430.                ALLOW.CALLER.TURBO, _
  431.                USE.DEVICE.DRIVER$, _
  432.                PRELOG$, _
  433.                NEW.USER.QUESTIONNAIRE$, _
  434.                EPILOG$, _
  435.                REGISTRATION.PROGRAM$, _
  436.                QUES.PATH$, _
  437.                USER.LOCATION$, _
  438.                USER.INITIALIZE.COMMAND$, _
  439.                USER.FIRMWARE.CLEAR.CMND$, _
  440.                USER.FIRMWARE.WRITE.CMND$, _
  441.                ENFORCE.UPLOAD.DOWNLOAD.RATIOS, _
  442.                SIZE.OF.STACK, _
  443.                SECURITY.EXEMPT.FROM.EPILOG, _
  444.                USE.BASIC.WRITES, _
  445.                DOSANSI, _
  446.                ESCAPE.INSECURE, _
  447.                USE.DIR.ORDER, _
  448.                ADD.DIR.SECURITY, _
  449.                MAX.EXTENDED.LINES, _
  450.                DF$
  451.       GOSUB 22340
  452.       INPUT #1,LOGON.MAIL.LEVEL$, _
  453.                MACRO.DRVPATH$, _
  454.                MACRO.EXTENSION$, _
  455.                EMPHASIZE.ON.DEF$, _
  456.                EMPHASIZE.OFF.DEF$, _
  457.                FG.1.DEF$, _
  458.                FG.2.DEF$, _
  459.                FG.3.DEF$, _
  460.                FG.4.DEF$, _
  461.                SECVIO.HLP$, _
  462.                FOSSIL, _
  463.                MAX.CARRIER.WAIT, _
  464.                CALLER.BKGRD, _
  465.                SMART.TEXT, _
  466.                TIME.LOCK, _
  467.                WRITE.BUF.DEF, _
  468.                SEC.KILL.ANY, _
  469.                DOORS.DEF$, _
  470.                SCREEN.OUT.MSG$, _
  471.                AUTOPAGE.DEF$
  472.       GOSUB 21905
  473.       GOSUB 22340
  474.       IF MAX.CARRIER.WAIT < 1 THEN _
  475.          MAX.CARRIER.WAIT = 30
  476.       CALL ANSIDECODE (FG.1.DEF$)
  477.       CALL ANSIDECODE (FG.2.DEF$)
  478.       CALL ANSIDECODE (FG.3.DEF$)
  479.       CALL ANSIDECODE (FG.4.DEF$)
  480.       IF LEFT$(MACRO.EXTENSION$,1) = "." THEN _
  481.          MACRO.EXTENSION$ = RIGHT$(MACRO.EXTENSION$,LEN(MACRO.EXTENSION$)-1)
  482.       IF DNLD.SUB < 1 OR DNLD.SUB > 99 THEN _
  483.          GOTO 11710
  484.       FOR I = 1 TO DNLD.SUB
  485.          INPUT #1,DNLD$(I)
  486.       NEXT
  487.       GOSUB 22340
  488. '
  489. ' * CONVERT "RBBS-PC.DEF" PARAMETERS TO DISPLAYABLE VALUES, AS REQUIRED
  490. '
  491. 11710 IF CALLERS.FILE$ = "" THEN _
  492.          CALLERS.FILE$ = NONE.PICKED$
  493.       IF ALTDIR.EXTENSION$ = "" THEN _
  494.          ALTDIR.EXTENSION$ = NONE.PICKED$
  495.       IF ALWAYS.STREW.TO$ = "" THEN _
  496.          ALWAYS.STREW.TO$ = NONE.PICKED$
  497.       IF QUES.PATH$ = "" THEN _
  498.          QUES.PATH$ = NONE.PICKED$
  499.       IF NEW.USER.QUESTIONNAIRE$ = "" THEN _
  500.          NEW.USER.QUESTIONNAIRE$ = NONE.PICKED$
  501.       IF REQUIRED.QUESTIONNAIRE$ = "" THEN _
  502.          REQUIRED.QUESTIONNAIRE$ = NONE.PICKED$
  503.       IF NET.MAIL$ = "NONE" THEN _
  504.          NET.MAIL$ = NONE.PICKED$
  505.       IF CONFMAIL.LIST$ = "" THEN _
  506.          CONFMAIL.LIST$ = NONE.PICKED$
  507.       X$ = BULLETIN.MENU$
  508.       CALL BRKFNAME (X$,Z$,BULLETIN.MENU$,Y$,-1)
  509.       IF Y$ <> "" THEN _
  510.          BULLETIN.MENU$ = BULLETIN.MENU$ + Y$
  511.       X$ = BULLETIN.PREFIX$
  512.       CALL BRKFNAME (X$,Z$,BULLETIN.PREFIX$,Y$,-1)
  513.       IF RECYCLE.TO.DOS = 0 THEN _
  514.          RECYCLE.TO.DOS$ = "INTERNAL" _
  515.       ELSE RECYCLE.TO.DOS$ = "SYSTEM
  516.       HELP.FILE.PREFIX$ = LEFT$(HELP$(3),LEN(HELP$(3)) - 1)
  517.       SF = SYSOP.FUNCTION(1)
  518.       GOSUB 16062
  519.       FOR I = 2 TO NUM.SYSOP
  520.          IF SYSOP.FUNCTION(I) > SF THEN _
  521.             GOTO 11790
  522.          SF = SYSOP.FUNCTION(I)
  523. 11790 NEXT
  524.       MM = MAIN.FUNCTION(1)
  525.       FOR I = 1 TO NUM.MAIN
  526.          MAIN.FUNCTION$(I,2) = MID$(MAIN.COMMANDS$,I,1)
  527.          IF MAIN.FUNCTION(I)    > MM THEN _
  528.             GOTO 11810
  529.          MM = MAIN.FUNCTION(I)
  530. 11810 NEXT
  531.       FC = FILES.FUNCTION(1)
  532.       FOR I = 1 TO NUM.FILES
  533.          FILES.FUNCTION$(I,2) = MID$(FILE.COMMANDS$,I,1)
  534.          IF FILES.FUNCTION(I) > FC THEN _
  535.             GOTO 11830
  536.          FC = FILES.FUNCTION(I)
  537. 11830 NEXT
  538.       UE = UTILITY.FUNCTION(1)
  539.       FOR I = 1 TO NUM.UTILITY
  540.          UTILITY.FUNCTION$(I,2) = MID$(UTIL.COMMANDS$,I,1)
  541.          IF UTILITY.FUNCTION(I) > UE THEN _
  542.             GOTO 11850
  543.          UE = UTILITY.FUNCTION(I)
  544. 11850 NEXT
  545.       PS = LIBRARY.FUNCTION(1)
  546.       FOR I = 1 TO NUM.LIBRARY
  547.          LIBRARY.FUNCTION$(I,2) = MID$(LIBRARY.COMMANDS$,I,1)
  548.          IF LIBRARY.FUNCTION(I) > PS THEN _
  549.            GOTO 11860
  550.          PS = LIBRARY.FUNCTION(I)
  551. 11860 NEXT
  552.       FOR I = 1 TO NUM.GLOBAL
  553.          GLOBAL.FUNCTION$(I,2) = MID$(GLOBAL.COMMANDS$,I,1)
  554.       NEXT
  555.       CLOSE #1
  556.       GOSUB 50480
  557.       GOSUB 50530
  558. 11870 IF EXPERT.USER = 0 THEN _
  559.          EXPERT.USER$ = "NOVICE
  560.       IF EXPERT.USER = -1 THEN _
  561.          EXPERT.USER$ = "EXPERT
  562.       DRIVE.FOR.UPLOADS$ = RIGHT$(DOWNLOAD.DRIVES$,1)
  563.       DRIVES.FOR.DOWNLOADS$ = LEFT$(DOWNLOAD.DRIVES$,(LEN(DOWNLOAD.DRIVES$) - 1))
  564.       PROMPT.BELL$ = "ON"
  565.       IF PROMPT.BELL = 0 THEN _
  566.          PROMPT.BELL$ = "OFF
  567.       GOSUB 15780
  568.       IF SYSOP.PASSWORD.1$ = "" OR SYSOP.PASSWORD.2$ = "" THEN _
  569.          MN1$ = "<Disabled>" : _
  570.          MN2$ = "" _
  571.       ELSE MN1$ = SYSOP.PASSWORD.1$ : _
  572.            MN2$ = SYSOP.PASSWORD.2$
  573.       M11$ = "NO"
  574.       IF PAGING.PRINTER.SUPPORT$ = ". " + CHR$(7) THEN _
  575.          M11$ = "YES"
  576.       IF START.HASH < 1 THEN _
  577.          START.HASH = 1
  578.       IF LEN.HASH < 2 THEN _
  579.          LEN.HASH = 31
  580.       IF REQUIRED.QUESTIONNAIRE$ = "" THEN _
  581.          REQUIRED.QUESTIONNAIRE$ = NONE.PICKED$
  582.       GOSUB 18002
  583.       GOSUB 18102
  584.       I = 1
  585.       GOSUB 13030
  586.       IF NO.DEF.FILE = FALSE THEN _
  587.          GOTO 12151
  588.       IF NOT SUBBOARD THEN _
  589.          GOTO 12151
  590.       MAIN.MESSAGE.FILE$ = BASE.NAME$+"M.DEF"
  591.       MAIN.USER.FILE$    = BASE.NAME$+"U.DEF"
  592. 12151 CONFERENCE.MODE = 0
  593.       SUBBOARD = FALSE
  594.       MAINMSG$ = MAIN.MESSAGE.FILE$
  595.       MAINUSR$ = MAIN.USER.FILE$
  596.       I = INSTR(EXTENSION.LIST$,".")
  597.       IF I = 0 THEN _
  598.          DEFAULT.EXTENSION$ = EXTENSION.LIST$ : _
  599.          COMPRESSED.EXT$ = NONE.PICKED$ _
  600.       ELSE _
  601.          DEFAULT.EXTENSION$ = LEFT$(EXTENSION.LIST$,I-1) : _
  602.          COMPRESSED.EXT$ = MID$(EXTENSION.LIST$,I)
  603. 12160 KEY OFF
  604. '
  605. ' * IF A MESSAGE FILE EXISTS, READ IN THE PARAMETERS IN IT.
  606. '
  607.       FILE$ = MAIN.MESSAGE.FILE$
  608.       GOSUB 30000
  609.       NO.OLD.FILE = FALSE
  610.       IF OKAY THEN _           ' IF MESSAGE FILE EXISTS, READ CHECKPOINT RECORD
  611.          GOTO 12170
  612.       NO.OLD.FILE = TRUE
  613.       A$ = "Message file " + MAIN.MESSAGE.FILE$ + " not found.  Create new one"
  614.       CALL GETNUMYN (A$,AB)
  615.       IF NOT AB THEN _
  616.          IF CONFERENCE.MODE > 0 THEN _                               ' DA082501
  617.             MAIN.MESSAGE.FILE$ = MAINMSG$ : _                        ' DA082501
  618.             MAIN.USER.FILE$ = MAINUSR$ : _                           ' DA082501
  619.             GOTO 12151 _                                             ' DA082501
  620.          ELSE _                                                      ' DA082501
  621.             SYSTEM                                                   ' DA082501
  622.       CALLS.TODATE! = 0                                 ' FIRST MSG#    -- 0
  623.       FIRST.USER.RECORD = 1                             ' USERS file    -- first record number
  624.       CURRENT.USER.COUNT = FIRST.USER.RECORD            ' USERS file    -- next available record number
  625.       HIGHEST.USER.RECORD = MAX.USR.FILE.SIZE.FRM.DEF   ' USERS file    -- last record number
  626.       FIRST.MESSAGE.RECORD = 2+MAXIMUM.NUMBER.OF.NODES  ' MESSAGES file -- first record of messages
  627.       NEXT.MESSAGE.RECORD = FIRST.MESSAGE.RECORD        ' MESSAGES file -- next available record number
  628.       HIGHEST.MESSAGE.RECORD = 5 * MAX.ALLOWED.MSGS.FRM.DEF _
  629.                                + 1 _
  630.                                + MAXIMUM.NUMBER.OF.NODES ' MESSAGES file -- last record number
  631.       MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF  ' MESSAGES file -- maximum number of messages
  632.       B1 = MAXIMUM.NUMBER.OF.NODES
  633.       B3! = HIGHEST.MESSAGE.RECORD
  634.       GOSUB 22080
  635.       GOSUB 30450                        ' UPDATE CHECKPOINT RECORD
  636. 12170 GOSUB 30040                        ' READ THE CHECKPOINT RECORD
  637.       MAX.MSG.FILE.SIZE.FRM.DEF! = HIGHEST.MESSAGE.RECORD
  638.       MAX.ALLOWED.MSGS.FRM.DEF  = INT((HIGHEST.MESSAGE.RECORD - FIRST.MESSAGE.RECORD) / 5) + 1
  639.       IF MAX.ALLOWED.MSGS.FRM.DEF > 999 THEN _
  640.          MAX.ALLOWED.MSGS.FRM.DEF = 999
  641.       IF MAXIMUM.NUMBER.OF.MSGS < 1 THEN _
  642.          MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF : _
  643.          GOSUB 30450                     ' READ THE CHECKPOINT RECORD
  644.       FILE$ = MAIN.USER.FILE$            ' Check for USERS file
  645.       GOSUB 30000
  646.       NO.OLD.FILE = FALSE
  647.       IF OKAY THEN _
  648.          GOSUB 50500 : _
  649.          GOTO 12189
  650.       NO.OLD.FILE = TRUE
  651.       B1 = MAX.USR.FILE.SIZE.FRM.DEF
  652.       A$ = MAIN.USER.FILE$
  653.       GOSUB 22140
  654.       GOSUB 22150
  655. 12189 FOR I = 1 TO 10
  656.          KEY I,""
  657.       NEXT
  658.       NO.OLD.FILE = FALSE
  659.       B1 = MAX.USR.FILE.SIZE.FRM.DEF
  660.       GOSUB 22140
  661.       IF NO.DEF.FILE = FALSE THEN  _
  662.          GOTO 12190
  663.       GOSUB 18700
  664.       NO.DEF.FILE = FALSE
  665. '
  666. ' *  DISPLY CONFIG'S MAIN FUNCTION KEY MENU
  667. '
  668. 12190 IF KSTACKED$ = "" THEN _
  669.          IX = 0
  670. 12320 CALL DISPLAY
  671.       IF IX = 21 THEN _
  672.          GOTO 22350
  673.       ON IPAGE GOTO 12622, _  ' 1        F1 - Global Parameters (part 1)
  674.                     12624, _  ' 2        F2 - Global Parameters (part 2)
  675.                     12626, _  ' 3        F3 - Global Parameters (part 3)
  676.                     12628, _  ' 4        F4 - RBBS-PC System Files (part 1)
  677.                     12630, _  ' 5        F5 - RBBS-PC System Files (part 2)
  678.                     12632, _  ' 6        F6 - RBBS-PC "doors"
  679.                     12634, _  ' 7        F7 - RBBS-PC security (part 1)
  680.                     12636, _  ' 8        F8 - RBBS-PC security (part 2)
  681.                     12640, _  ' 9        F9 - Multiple RBBS-PC parameters
  682.                     12641, _  '10       F10 - RBBS-PC's Utilities
  683.                     12642, _  '11  Shift-F1 - RBBS-PC File Manager
  684.                     12643, _  '12  Shift-F2 - RBBS-PC comm. parameters (part 1)
  685.                     12644, _  '13  Shift-F3 - RBBS-PC comm. parameters (part 2)
  686.                     12645, _  '14  Shift-F4 - RBBS-PC Net Mail
  687.                     12646, _  '15  Shift-F5 - New user's parameters
  688.                     12647, _  '16  Shift-F6 - Library parameters
  689.                     12648     '17  Shift-F7 - RBBS-PC Color parameters
  690. '
  691. ' *  HANDLE UNSUPPORTED REQUEST
  692. '
  693. 12325 IX = IPAGE
  694.       GOTO 12320
  695. 12622 ON ILOOKUP GOSUB 12840, _  '   1 SYSOP's first name
  696.                        12910, _  '   2 SYSOP's last name
  697.                        13140, _  '   3 SYSOP's default signon mode
  698.                        13210, _  '   4 SYSOP's office hours
  699.                        13224, _  '   5 Page SYSOP with printer's bell
  700.                        13249, _  '   6 Go off-line when disk is full
  701.                        13750, _  '   7 Prompt bell
  702.                        13840, _  '   8 Maximum minutes per session
  703.                        16650, _  '   9 Maximum minutes per day
  704.                        15234, _  '  10 Factor to extend time for uploads
  705.                        13940, _  '  11 Months of inactivity before deleted
  706.                        13131, _  '  12 Name of this RBBS-PC
  707.                        15530, _  '  13 Foreground color
  708.                        15590, _  '  14 Background color
  709.                        15650, _  '  15 Border color
  710.                        13320, _  '  16 ANSI.SYS in CONFIG.SYS?
  711.                        13330, _  '  17 Control code for Smart Text
  712.                        17725, _  '  18 AutoPage def file
  713.                        13000, _  '  19 Level of logon mail report
  714.                        12325     '  20
  715.       GOTO 12325
  716. 12624 ON ILOOKUP GOSUB 15800, _  '  21 Remind users of messages they left
  717.                        16690, _  '  22 Remind users of uploads and downloads
  718.                        16722, _  '  23 Remind users of their profile
  719.                        17600, _  '  24 Enable download of new files at logon
  720.                        16730, _  '  25 Specify default page length
  721.                        16790, _  '  26 Set maximum number of lines/message
  722.                        16000, _  '  27 Is system "welcome" interruptable?
  723.                        15840, _  '  28 Are the system bulletins optional?
  724.                        16040, _  '  29 Type of PC running RBBS-PC
  725.                        17230, _  '  30 Symbols for SYSOP's commands
  726.                        17240, _  '  31 Symbols for main menu's commands
  727.                        17250, _  '  32 Symbols for file menu's commands
  728.                        17260, _  '  33 Symbols for utilities menu's commands
  729.                        17264, _  '  34 Symbols for "global" commands
  730.                        17500, _  '  35 Show section at command prompt?
  731.                        17550, _  '  36 Show commands at command prompt?
  732.                        15830, _  '  37 Restrict valid cmnds to current section
  733.                        15820, _  '  38 Use machine language subroutines?
  734.                        15825, _  '  39 Use BASIC PRINT for screen writes?
  735.                        16795     '  40 Set max # of lines for extended desc
  736.       GOTO 12325
  737. 12626 ON ILOOKUP GOSUB 18000, _  '  41 Field used to locate a users record
  738.                        18100, _  '  42 Field to distinguish users with same id
  739.                        17800, _  '  43 Where personal id begins in user rec
  740.                        17810, _  '  44 Length of personal id in user rec
  741.                        17830, _  '  45 First Name prompt
  742.                        17840, _  '  46 Last Name prompt
  743.                        17850, _  '  47 Enforce upload/download ratios
  744.                        17630, _  '  48 Restrict users by date
  745.                        18510, _  '  49 Security level when subscription expires
  746.                        18530, _  '  50 Days before expiration to warn user
  747.                        18520, _  '  51 Days a newuser gets when registers
  748.                        17610, _  '  52 Turn printer off on recycle
  749.                        17620, _  '  53 Play music for RBBS themes?
  750.                        21760, _  '  54 Buffer size for text files
  751.                        16032, _  '  55 Size of stack space to use
  752.                        22550, _  '  56 Notify users when SYSOP wants system?
  753.                        17845, _  '  57 Ask users their (city/state)
  754.                        17625, _  '  58 Order show dirs for ALL option
  755.                        21770, _  '  59 Buffer size on writes
  756.                        21900     '  60 Voice synthesizer support
  757.       GOTO 12325
  758. 12628 ON ILOOKUP GOSUB 14790, _  '  61 Drive and file describing bulletins
  759.                        15290, _  '  62 Number of active bulletins
  760.                        14800, _  '  63 Prefix used to name bulletin files
  761.                        14810, _  '  64 Drive and path for 'help' files
  762.                        14820, _  '  65 Prefix of nine major help files
  763.                        14825, _  '  66 Extension for individual help files
  764.                        14915, _  '  67 Help file for categorizing uploads
  765.                        14830, _  '  68 Name of 'newuser' file
  766.                        14840, _  '  69 Name of 'welcome" file
  767.                        14860, _  '  70 Name of SYSOP's commands menu
  768.                        14870, _  '  71 Name of main message command menu
  769.                        14880, _  '  72 Name of file subsystem command menu
  770.                        14890, _  '  73 Name of utilities command menu
  771.                        14900, _  '  74 Menu listing available conferences
  772.                        14905, _  '  75 Menu of questionnaires
  773.                        14815, _  '  76 Drive/path for optional questionnaires
  774.                        18310, _  '  77 Name of main PUI
  775.                        15835, _  '  78 Can menus pause in the middle?
  776.                        15850, _  '  79 Macro drive/path
  777.                        15860     '  80 Macro extension
  778.       GOTO 12325
  779. 12630 ON ILOOKUP GOSUB 14910, _  '  81 File of unacceptable user names
  780.                        17700, _  '  82 Name of required questionnaire
  781.                        17710, _  '  83 Name of "prelog" file
  782.                        17720, _  '  84 Name of New User questionnaire
  783.                        17730, _  '  85 Name of "epilog" questionnaire
  784.                        15460, _  '  86 Name of 'message' file
  785.                        15500, _  '  87 Name of 'user' file
  786.                        15464, _  '  88 Name of 'comments' file
  787.                        15993, _  '  89 Record comments as private messages?
  788.                        15461, _  '  90 Name of 'callers' file
  789.                        15991, _  '  91 Extened logging to 'callers' file?
  790.                        22550, _  '  92 Wrap-around the 'callers' file?
  791.                        12670, _  '  93 Conferences to search for new mail
  792.                        21780, _  '  94 Max # of work variables
  793.                        12325, _  '  95
  794.                        12325, _  '  96
  795.                        12325, _  '  97
  796.                        12325, _  '  98
  797.                        12325, _  '  99
  798.                        12325     ' 100
  799.       GOTO 12325
  800. 12632 ON ILOOKUP GOSUB 16290, _  ' 101 Are 'doors' available?
  801.                        16130, _  ' 102 Name of menu listing available doors
  802.                        16140, _  ' 103 Name of file built dynamically for doors
  803.                        16150, _  ' 104 Name of .BAT the will re-invoke RBBS
  804.                        16160, _  ' 105 Drive to look for COMMAND.COM on
  805.                        16170, _  ' 106 Enable CTTY command for doors
  806.                        18640, _  ' 107 Name of program to invoke at logon
  807.                        17215, _  , 108 Who subject to logon door
  808.                        18625, _  ' 109 Doors control file
  809.                        12325, _  ' 110
  810.                        12325, _  ' 111
  811.                        12325, _  ' 112
  812.                        12325, _  ' 113
  813.                        12325, _  ' 114
  814.                        12325, _  ' 115
  815.                        12325, _  ' 116
  816.                        12325, _  ' 117
  817.                        12325, _  ' 118
  818.                        12325, _  ' 119
  819.                        12325     ' 120
  820.       GOTO 12325
  821. 12634 ON ILOOKUP GOSUB 12980, _  ' 121 Pseudonym to sign on remotely as SYSOP
  822.                        12990, _  ' 122 Escape logs on with no security
  823.                        17160, _  ' 123 Minimum security level to logon
  824.                        17170, _  ' 124 Default security level for new users
  825.                        17180, _  ' 125 SYSOP's security level
  826.                        17200, _  ' 126 Minimum security to see SYSOP's menu
  827.                        17210, _  ' 127 Min security to add extended desc
  828.                        17220, _  ' 128 Max # security violations allowed
  829.                        17230, _  ' 129 Security levels for SYSOP commands
  830.                        17240, _  ' 130 Security levels for main commands
  831.                        17250, _  ' 131 Security levels for file commands
  832.                        17260, _  ' 132 Security levels for utilities commands
  833.                        17264, _  ' 133 Security level for 'global' commands'
  834.                        17290, _  ' 134 Max # password changes allowed
  835.                        17300, _  ' 135 Min. security for temp. passwords
  836.                        17310, _  ' 136 Min. security to overwrite on uploads
  837.                        17316, _  ' 137 User's security exempted from packing
  838.                        15310, _  ' 138 Default security to read new Priv. Msg.
  839.                        15320, _  ' 139 Default security to read new Public Msg.
  840.                        15330     ' 140 Min. security to change msg.'s security
  841.       GOTO 12325
  842. 12636 ON ILOOKUP GOSUB 22550, _  ' 141 Call back verification of all/new users
  843.                        18630, _  ' 142 Drive/path for personal files
  844.                        12750, _  ' 143 Name of personal directory
  845.                        17820, _  ' 144 What protocol required for personal dnld
  846.                        17190, _  ' 145 File listing download-secured files
  847.                        17270, _  ' 146 File name with privileged passwords
  848.                        17645, _  ' 147 Concatenate ASCII files in pers. dnld?
  849.                        18515, _  ' 148 Security level to categorize uploads
  850.                        18500, _  ' 149 Min. security to view new uploads
  851.                        16033, _  ' 150 Security level exempt from "epilog"
  852.                        18545, _  ' 151 Min. security to automatically add users
  853.                        18340, _  ' 152 Min. security to use turbo logon
  854.                        18345, _  ' 153 Min. security to add dir entry
  855.                        17280, _  ' 154 Help file for security violation
  856.                        18330, _  ' 155 Time Lock Selection
  857.                        17640, _  ' 156 Auto upgrade security from main
  858.                        17635, _  ' 157 Min sec to read/kill all msgs
  859.                        13010, _  ' 158 How screen out lines from msg
  860.                        12325, _  ' 159
  861.                        12325     ' 160
  862.       GOTO 12325
  863. 12640 ON ILOOKUP GOSUB 21750, _  ' 161 Maximum number of concurrent RBBS-PC's
  864.                        21810, _  ' 162 Environment running RBBS-PC
  865.                        21950, _  ' 163 Method that RBBS-PC re-cycles with
  866.                        21910, _  ' 164 Number of records in 'user' file
  867.                        22040, _  ' 165 Number of records in 'message' file
  868.                        13890, _  ' 166 Maximum number of messages allowed
  869.                        25040, _  ' 167 Conference file maintenance
  870.                        14845, _  ' 168 Default extension compressed files
  871.                        14930, _  ' 169 Additional compressed extensions
  872.                        22030, _  ' 170 Can messages grow
  873.                        12325, _  ' 171
  874.                        12325, _  ' 172
  875.                        12325, _  ' 173
  876.                        12325, _  ' 174
  877.                        12325, _  ' 175
  878.                        12325, _  ' 176
  879.                        12325, _  ' 177
  880.                        12325, _  ' 178
  881.                        12325, _  ' 179
  882.                        12325     ' 180
  883.       IF REFRESH = 1 THEN _
  884.          REFRESH = 0 : _
  885.          GOTO 12151
  886.       IF REFRESH = 2 THEN _
  887.          REFRESH = 0 : _
  888.          GOTO 12160
  889.       GOTO 12325
  890. 12641 ON ILOOKUP GOSUB 23160, _  ' 181 Pack the 'messages' file
  891.                        22570, _  ' 182 Rebuild the 'user' file
  892.                        23630, _  ' 183 Print the message headers
  893.                        23740, _  ' 184 Renumber messages
  894.                        23620, _  ' 185 Repair the 'message' file
  895.                        24050, _  ' 186 Require users to answer questionnaire
  896.                        24790, _  ' 187 Check FMS directory
  897.                        13180, _  ' 188 Check Personal Download directory
  898.                        18700, _  ' 189 Check critical parameters
  899.                        18800, _  ' 190 Set New parameters
  900.                        24795, _  ' 191 Reset active printers for all nodes
  901.                        24040, _  ' 192 Set Highlight to match graphics
  902.                        12325, _  ' 193
  903.                        12325, _  ' 194
  904.                        12325, _  ' 195
  905.                        12325, _  ' 196
  906.                        12325, _  ' 197
  907.                        12325, _  ' 198
  908.                        12325, _  ' 199
  909.                        12325     ' 200
  910.       GOTO 12325
  911. 12642 ON ILOOKUP GOSUB 14920, _  ' 201 Drive available for uploading
  912.                        12730, _  ' 202 Name of directory for uploading
  913.                        18550, _  ' 203 Drive/path for upload dir
  914.                        13470, _  ' 204 Drive(s) available for downloading
  915.                        25380, _  ' 205 Are DOS subdirectories used?
  916.                        25420, _  ' 206 Upload to a DOS subdirectory?
  917.                        25460, _  ' 207 Are downloads from DOS subdirectories?
  918.                        25495, _  ' 208 List, change, add, delete subdir.?
  919.                        14850, _  ' 209 Extension for file directories
  920.                        14855, _  ' 210 Alternate directory extension
  921.                        14857, _  ' 211 Name (prefix) of dir of dir
  922.                        15920, _  ' 212 Omit directory list from N>ew command?
  923.                        18350, _  ' 213 Copy upload descriptions to another file
  924.                        12740, _  ' 214 FMS directory name
  925.                        17590, _  ' 215 Limit file searches to upload dir
  926.                        18200, _  ' 216 Default category codes for uploads
  927.                        18300, _  ' 217 File name with valid category codes
  928.                        18360, _  ' 218 Restrict dir search for 'ALL' to
  929.                        18400, _  ' 219 Length of description of uploads
  930.                        18600     ' 220 Drive/path directory files
  931.       GOTO 12325
  932. 12643 ON ILOOKUP GOSUB 14120, _  ' 221 Communications Port being used
  933.                        15240, _  ' 222 Seconds for modem to initalize
  934.                        15250, _  ' 223 Seconds to wait before issuing cmds.
  935.                        13228, _  ' 224 Number of rings to answer on
  936.                        15710, _  ' 225 Use standard RBBS-PC modem commands
  937.                        12325, _  ' 226 Microcom's MNP available?
  938.                        16121, _  ' 227 Issue modem commands between rings?
  939.                        16124, _  ' 228 Baud rate to initially open modem at
  940.                        16031, _  ' 229 Seconds to wait before disconnecting
  941.                        16725, _  ' 230 Is a dumb modem being used?
  942.                        23731, _  ' 231 Initialize Hayes 2400 firmware
  943.                        18540, _  ' 232 DTR drop delay time
  944.                        18620, _  ' 233 Where external protocol pgms are
  945.                        17650, _  ' 234 Always check for autodownload support
  946.                        15880, _  ' 235 Require non-ASCII protocol?
  947.                        13280, _  ' 236 If no calls, recycle after
  948.                        13290, _  ' 237 Leave modem at initial baud
  949.                        12325, _  ' 238
  950.                        12325, _  ' 239
  951.                        12325     ' 240
  952.       GOTO 12325
  953. 12644 ON ILOOKUP GOSUB 13295, _  ' 241 Switch back when change comm. parms.
  954.                        13238, _  ' 242 Min. baud for new callers
  955.                        13242, _  ' 243 Min. baud for old callers
  956.                        13260, _  ' 244 Use CTS for modem flow control?
  957.                        13310, _  ' 245 Use XON/XOFF for flow control
  958.                        13270, _  ' 246 Max time to wait for carrier
  959.                        12325, _  ' 247
  960.                        12325, _  ' 248
  961.                        12325, _  ' 249
  962.                        12325, _  ' 250
  963.                        12325, _  ' 251
  964.                        12325, _  ' 252
  965.                        12325, _  ' 253
  966.                        12325, _  ' 254
  967.                        12325, _  ' 255
  968.                        12325, _  ' 256
  969.                        12325, _  ' 257
  970.                        12325, _  ' 258
  971.                        12325, _  ' 259
  972.                        12325     ' 260
  973.       GOTO 12325
  974. 12645 ON ILOOKUP GOSUB 26040, _  ' 261 Time of day to drop to DOS
  975.                        26070, _  ' 262 NET-MAIL driver to invoke
  976.                        26100, _  ' 263 Echo on command for host
  977.                        26110, _  ' 264 Echo off command for host
  978.                        13285, _  ' 265 Echo remote input?
  979.                        26105, _  ' 266 ASCII upload line acknowledge
  980.                        15466, _  ' 267 Up/download list
  981.                        15468, _  ' 268 Up/download locator
  982.                        12325, _  ' 269
  983.                        12325, _  ' 270
  984.                        12325, _  ' 271
  985.                        12325, _  ' 272
  986.                        12325, _  ' 273
  987.                        12325, _  ' 274
  988.                        12325, _  ' 275
  989.                        12325, _  ' 276
  990.                        12325, _  ' 277
  991.                        12325, _  ' 278
  992.                        12325, _  ' 279
  993.                        12325     ' 280
  994.       GOTO 12325
  995. 12646 ON ILOOKUP GOSUB 17560, _  ' 281 Prompt new users for their preferences
  996.                        22550, _  ' 282 New users default sign-on mode
  997.                        22550, _  ' 283 New users default file-transfer mode
  998.                        22550, _  ' 284 Line feeds for new users default to
  999.                        22550, _  ' 285 Nulls for new users default to
  1000.                        22550, _  ' 286 Prompt bell for new users defaults to
  1001.                        22550, _  ' 287 New users 'graphics' ability is
  1002.                        22550, _  ' 288 New users upper/lower case
  1003.                        22550, _  ' 289 New users margins defaults are
  1004.                        17570, _  ' 290 Remember new users
  1005.                        17580, _  ' 291 Survive no user room
  1006.                        12325, _  ' 292
  1007.                        12325, _  ' 293
  1008.                        12325, _  ' 294
  1009.                        12325, _  ' 295
  1010.                        12325, _  ' 296
  1011.                        12325, _  ' 297
  1012.                        12325, _  ' 298
  1013.                        12325, _  ' 299
  1014.                        12325     ' 300
  1015.       GOTO 12325
  1016. 12647 ON ILOOKUP GOSUB 20000, _  ' 301 Drive for Library
  1017.                        20010, _  ' 302 Drive/path for directory
  1018.                        20020, _  ' 303 Extension for directory lists
  1019.                        20030, _  ' 304 Drive/path for work disk
  1020.                        20040, _  ' 305 # of disks in Library
  1021.                        20050, _  ' 306 # of Master directories
  1022.                        20060, _  ' 307 # of subdirectories in each master
  1023.                        20070, _  ' 308 Prefix of subdirectory on Library
  1024.                        20080, _  ' 309 Name of subsystem command menu
  1025.                        20090, _  ' 310 Symbols to use for menu commands
  1026.                        20090, _  ' 311 Security levels for menu functions
  1027.                        20100, _  ' 312 Drive/path of ARCHIVE utility
  1028.                        20110, _  ' 313 Name of ARCHIVE utility
  1029.                        12325, _  ' 314
  1030.                        12325, _  ' 315
  1031.                        12325, _  ' 316
  1032.                        12325, _  ' 317
  1033.                        12325, _  ' 318
  1034.                        12325, _  ' 319
  1035.                        12325     ' 320
  1036.       GOTO 12325
  1037. 12648 ON ILOOKUP GOSUB 26115, _  ' 321 Turn on Emphasis
  1038.                        26120, _  ' 322 Restore text to normal
  1039.                        12850, _
  1040.                        12860, _
  1041.                        12870, _
  1042.                        12880, _
  1043.                        12890, _  ' 327 Caller Background Color
  1044.                        12325, _  ' 328
  1045.                        12325, _  ' 329
  1046.                        12325, _  ' 330
  1047.                        12325, _  ' 331
  1048.                        12325, _  ' 332
  1049.                        12325, _  ' 333
  1050.                        12325, _  ' 334
  1051.                        12325, _  ' 335
  1052.                        12325, _  ' 336
  1053.                        12325, _  ' 337
  1054.                        12325, _  ' 338
  1055.                        12325, _  ' 339
  1056.                        12325     ' 340
  1057.       GOTO 12325
  1058. '
  1059. ' * LIST OF CONFERENCES TO SEARCH FOR NEW MAIL
  1060. '
  1061. 12670 CALL GETNUMYN ("Do you want to notify callers of conference mail",X)
  1062.       IF NOT X THEN _
  1063.          CONFMAIL.LIST$ = NONE.PICKED$ : _
  1064.          RETURN
  1065.       GOSUB 17340
  1066.       GOSUB 17740
  1067.       CONFMAIL.LIST$ = HJ$
  1068.       RETURN
  1069. '
  1070. ' * PROCESS NAME OF UPLOAD DIRECTORY
  1071. '
  1072. 12730 CALL ASKRO("Name of upload directory (8 char. max)?",24,HJ$)
  1073.       IF LEN(HJ$) < 1 OR _
  1074.          LEN(HJ$) > 8 THEN _
  1075.          GOTO 12730
  1076.       CALL ALLCAPS (HJ$)
  1077.       UPLOAD.DIRECTORY$ = HJ$
  1078.       RETURN
  1079. '
  1080. ' * Get the File Management System Directory
  1081. '
  1082. 12740 CALL ASKRO("Name of File Management System (or NONE) directory (8 char. max)?",24,HJ$)
  1083.       IF LEN(HJ$) > 8 THEN _
  1084.          GOTO 12740
  1085.       CALL ALLCAPS (HJ$)
  1086.       FMS.DIRECTORY$ = HJ$
  1087.       IF FMS.DIRECTORY$ = "NONE" THEN _
  1088.          FMS.DIRECTORY$ = ""
  1089.       RETURN
  1090. 12750 CALL ASKRO("Name (prefix, optional extension) of Personal directory",24,HJ$)
  1091.       IF LEN(HJ$) < 1 OR _
  1092.          LEN(HJ$) > 12 OR INSTR(HJ$,".") > 9 THEN _
  1093.          GOTO 12750
  1094.       CALL ALLCAPS (HJ$)
  1095.       PERSONAL.DIR$ = HJ$
  1096.       IF INSTR(PERSONAL.DIR$,".") < 1 THEN _
  1097.          PERSONAL.DIR$ = PERSONAL.DIR$ + _
  1098.                          ".DEF"
  1099.       IF (INSTR(PERSONAL.DIR$,":") < 1) AND _
  1100.          (INSTR(PERSONAL.DIR$,"\") < 1) THEN _
  1101.          PERSONAL.DIR$ = PERSONAL.DRVPATH$+PERSONAL.DIR$
  1102.       RETURN
  1103. '
  1104. ' * GET THE SYSOP'S FIRST NAME
  1105. '
  1106. 12840 CALL ASKRO("What is the SYSOP's FIRST Name?",24,HJ$)
  1107.       IF LEN(HJ$) < 3 THEN _
  1108.          GOTO 12840
  1109.       CALL ALLCAPS (HJ$)
  1110.       SYSOP.FIRST.NAME$ = HJ$
  1111.       RETURN
  1112. 12850 CALL GETANSI (FG.1.DEF$," 1st")
  1113.       RETURN
  1114. 12860 CALL GETANSI (FG.2.DEF$," 2nd")
  1115.       RETURN
  1116. 12870 CALL GETANSI (FG.3.DEF$," 3rd")
  1117.       RETURN
  1118. 12880 CALL GETANSI (FG.4.DEF$," 4th")
  1119.       RETURN
  1120. 12890 CALL GETCOLOR("Caller's BACKGROUND color",CALLER.BKGRD)
  1121.       RETURN
  1122. '
  1123. ' * PROCESS THE SYSOP'S LAST NAME
  1124. '
  1125. 12910 CALL ASKRO("What is the SYSOP's LAST Name?",24,HJ$)
  1126.       IF LEN(HJ$) < 3 THEN _
  1127.          GOTO 12840
  1128.       CALL ALLCAPS (HJ$)
  1129.       SYSOP.LAST.NAME$ = HJ$
  1130.       RETURN
  1131. '
  1132. ' * PROCESS THE "PSEUDONYM" (FIRST NAME) USED BY THE SYSOP TO LOGON REMOTELY
  1133. '
  1134. 12980 CALL ASKRO("Secret first name that lets remote caller on as SYSOP is?",24,SYSOP.PASSWORD.1$)
  1135.       CALL ALLCAPS (SYSOP.PASSWORD.1$)
  1136.       IF SYSOP.PASSWORD.1$ = "" THEN _
  1137.          GOTO 12985
  1138.       MN1$ = SYSOP.PASSWORD.1$
  1139.       CALL ASKRO("Secret last name for remote SYSOP ([ENTER] disables)?",24,SYSOP.PASSWORD.2$)
  1140.       CALL ALLCAPS (SYSOP.PASSWORD.2$)
  1141.       IF SYSOP.PASSWORD.2$ = "" THEN _
  1142.          GOTO 12985
  1143.       MN2$ = SYSOP.PASSWORD.2$
  1144.       RETURN
  1145. 12985 MN1$ = "(Disabled)"
  1146.       MN2$ = ""
  1147.       SYSOP.PASSWORD.1$ = ""
  1148.       SYSOP.PASSWORD.2$ = ""
  1149.       RETURN
  1150. 12990 CALL GETNUMYN ("ESCAPE immediately lets on locally (NO=require name)",ESCAPE.INSECURE)
  1151.       RETURN
  1152. '
  1153. ' * IDENTIFY THE TYPE OF USERS THAT CAN BYPASS THE MESSAGE SUBSYSTEM
  1154. '
  1155. 13000 CALL ASKRO ("Mail to caller to report on logon: A)ll, N)ew only, S)kip (none)",24,HJ$)
  1156.       IF LEN(HJ$) < 1 THEN _
  1157.          GOTO 13000
  1158.       LOGON.MAIL.LEVEL$ = LEFT$(HJ$,1)
  1159.       CALL ALLCAPS (LOGON.MAIL.LEVEL$)
  1160.       IF INSTR("ANS",LOGON.MAIL.LEVEL$) = 0 THEN _
  1161.          GOTO 13000
  1162.       RETURN
  1163. 13010 CALL ASKRO ("Exclude lines from msg display that begin with",24,SCREEN.OUT.MSG$)
  1164.       RETURN
  1165. 13030 IF BYPASS = 0 THEN _
  1166.          BYPASS$ = "Any user" : _
  1167.          RETURN
  1168.       IF BYPASS = 1 THEN _
  1169.          BYPASS$ = "All but new users" : _
  1170.          RETURN
  1171.       IF BYPASS = 2 THEN _
  1172.          BYPASS$ = "Only EXPERT users" : _
  1173.          RETURN
  1174.       IF I = 0 THEN _
  1175.          CALL GETINIT ("Specify the security level required to bypass messages. ",24,-32767,32767,X,CR) : _
  1176.          X$=STR$(X)
  1177.       BYPASS$ = "Security >" + _
  1178.                 STR$(VAL(X$)) + _
  1179.                 " users"
  1180.       RETURN
  1181. '
  1182. ' * ALLOW THE SYSOP TO GIVE THIS RBBS-PC A PERSONAL NAME
  1183. '
  1184. 13131 CALL ASKRO("Enter name for this RBBS-PC (19 characters or less) ",24,HJ$)
  1185.       IF LEN(HJ$) > 19 THEN _
  1186.          GOTO 13131
  1187.       CALL ALLCAPS (HJ$)
  1188.       RBBS.NAME$ = HJ$
  1189.       RETURN
  1190. '
  1191. ' * ALLOW THE SYSOP TO SELECT "EXPERT" OR "NOVICE" AS HIS DEFAULT MODE
  1192. '
  1193. 13140 CALL ASKRO("SYSOP's default sign-on mode (E)xpert, N)ovice)? ",24,HJ$)
  1194.       IF LEN(HJ$) = 6 OR _
  1195.          LEN(HJ$) = 1 THEN _
  1196.          GOTO 13170
  1197.       GOTO 13140
  1198. 13170 CALL ALLCAPS (HJ$)
  1199.       IF HJ$ = "E" OR _
  1200.          HJ$ = "EXPERT" THEN _
  1201.          EXPERT.USER$ = "EXPERT" : _
  1202.          RETURN
  1203.       IF HJ$ = "N" OR _
  1204.          HJ$ = "NOVICE" THEN _
  1205.          EXPERT.USER$ = "NOVICE" : _
  1206.          RETURN
  1207.       GOTO 13140
  1208. 13180 CALL CHKPERSDIR (PERSONAL.DIR$,MAX.DESC.LEN,PERSONAL.LEN)
  1209.       RETURN
  1210. '
  1211. ' * ALLOW THE SYSOP TO SELECT HIS "OFFICE HOURS"
  1212. '
  1213. 13210 CALL GETINIT ("What is the earliest SYSOP wants to be paged? -- HHMM ",24,0,2359,START.OFFICE.HOURS,CR)
  1214.       IF CR THEN _
  1215.          GOTO 13210
  1216. 13216 CALL GETINIT ("What is the latest SYSOP wants to be paged? -- HHMM ",24,0,2359,END.OFFICE.HOURS,CR)
  1217.       IF CR THEN _
  1218.          GOTO 13216
  1219.       IF START.OFFICE.HOURS > END.OFFICE.HOURS THEN _
  1220.          SWAP START.OFFICE.HOURS,END.OFFICE.HOURS
  1221.       RETURN
  1222. '
  1223. ' * DETERMINE IF THE PRINTER'S "BELL" IS TO BE USED WHEN PAGING
  1224. '
  1225. 13224 CALL GETYESNO ("Use on-line printer's bell to the page SYSOP?",M11$)
  1226.       RETURN
  1227. '
  1228. ' * DETERMINE THE NUMBER OF RINGS RBBS-PC IS TO WAIT BEFORE ANSWERING
  1229. '
  1230. 13228 A$ = ""
  1231.       IF INSTR(USER.INIT.COMMAND$,"S0=") = 0 THEN _                  ' DA080503
  1232.          USER.INIT.COMMAND$ = USER.INIT.COMMAND$ + "S0=001"          ' DA080503
  1233. 13229 CALL GETINIT ("How many rings should RBBS-PC wait before answering? ",24,0,255,REQUIRED.RINGS,CR)
  1234.       IF CR THEN _
  1235.          GOTO 13229
  1236.       IF REQUIRED.RINGS = 0 THEN _
  1237.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,3) = "001" ' DA080503
  1238.          RETURN
  1239. 13233 CALL GETNUMYN ("Next call answered after" + _
  1240.              STR$(REQUIRED.RINGS) + _
  1241.              " rings. Do you want ringback?",AB)
  1242.       IF NOT AB THEN _
  1243.          GOTO 13237
  1244. 13235 IF REQUIRED.RINGS > 5 THEN _
  1245.          A$ = "(<6 for ringback)" : _
  1246.          GOTO 13229
  1247.       MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,3) = "255" ' DA080503
  1248.       RETURN
  1249. 13237 MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,3) = "254" ' DA080503
  1250.       RETURN
  1251. 13238 CALL MMINTEGER ("Minimum baud required for NEW callers",0,32000,MIN.NEWCALLER.BAUD)
  1252.       RETURN
  1253. 13242 CALL MMINTEGER ("Minimum baud required for OLD callers",0,32000,MIN.OLDCALLER.BAUD)
  1254.       RETURN
  1255. 13249 CALL GETNUMYN ("Should RBBS-PC go off-line when DISK FULL occurs ",DISKFULL.GO.OFFLINE)
  1256.       RETURN
  1257. '
  1258. ' * REQUEST DRIVE SPECIFICATION IN THE RANGE "A" TO THE MAXIMUM ALLOWABLE
  1259. '
  1260. 13253 CALL ASKRO ("Specify single drive in the range A->" + _
  1261.             M$ + _
  1262.             " for "+A$,24,HJ$)
  1263.       IF LEN(HJ$) <> 1 THEN _
  1264.          GOTO 13253
  1265.       CALL ALLCAPS (HJ$)
  1266.       IF HJ$ < "A" OR HJ$ > M$ THEN _
  1267.          GOTO 13253
  1268.       RETURN
  1269. '
  1270. ' * ALLOW THE SYSOP TO ELECT TO USE RTS FOR MODEM FLOW CONTROL
  1271. '
  1272. 13260 CALL GETYESNO ("Does your modem use the CTS signal for flow control",RTS$)
  1273.       RETURN
  1274. 13270 CALL MMINTEGER ("Seconds to wait for carrier after detecting a call",5,999,MAX.CARRIER.WAIT)
  1275.       RETURN
  1276. 13280 CALL MMINTEGER ("Wait how many minutes before recycling if no calls (0=forever)",0,32400,RECYCLE.WAIT)
  1277.       RETURN
  1278. 13285 CALL ASKRO ("What caller types is ECHOed by R)BBS, I)nter host, C)aller's pgm",24,DEFAULT.ECHOER$)
  1279.       IF LEN(DEFAULT.ECHOER$) < 1 THEN _
  1280.          GOTO 13285
  1281.       DEFAULT.ECHOER$ = LEFT$(DEFAULT.ECHOER$,1)
  1282.       CALL ALLCAPS (DEFAULT.ECHOER$)
  1283.       IF INSTR("ICR",DEFAULT.ECHOER$) < 1 THEN _
  1284.          GOTO 13285
  1285.       RETURN
  1286. 13290 CALL GETNUMYN ("Leave modem at init baud rate (don't match caller)",KEEP.INIT.BAUD)
  1287.       RETURN
  1288. 13295 CALL GETNUMYN ("Switch back comm settings if changed for up/down load",SWITCH.BACK)
  1289.       RETURN
  1290. 13310 CALL GETNUMYN ("Always respect XON/XOFF for flow control",XON.XOFF)
  1291.       RETURN
  1292. 13320 CALL GETNUMYN ("CONFIG.SYS includes an ANSI device driver",DOSANSI)
  1293.       RETURN
  1294. 13330 CALL MMINTEGER ("ASCII value for SMART TEXT control (0=NONE)",0,255,SMART.TEXT)
  1295.       RETURN
  1296. '
  1297. ' * ALLOW THE DRIVES AVAILABLE FOR DOWNLOADING TO BE SELECTED
  1298. '
  1299. 13470 CALL ASKRO ("Specify download drives (max of" + _
  1300.             STR$(MAXD) + _
  1301.             " in the range A-> " + M$ + "). ",24,HJ$)
  1302.       IF LEN(HJ$) < 1 OR LEN(HJ$) > MAXD THEN _
  1303.          GOTO 13470
  1304.       CALL ALLCAPS (HJ$)
  1305.       FOR I = 1 TO LEN(HJ$)
  1306.          A$(I) = MID$(HJ$,I,1)
  1307.       NEXT
  1308.       FOR I = 1 TO LEN(HJ$)
  1309.          IF A$(I) < "A" OR A$(I) > M$ THEN _
  1310.             GOTO 13470
  1311.       NEXT
  1312.       DRIVES.FOR.DOWNLOADS$ = HJ$
  1313.       IF DNLD.SUB < 1 THEN _
  1314.          RETURN
  1315.       FOR I = 1 TO DNLD.SUB
  1316.          IF INSTR(1,DRIVES.FOR.DOWNLOADS$,LEFT$(DNLD$(I),1)) = 0 THEN _
  1317.             DNLD$(I) = ""
  1318.       NEXT
  1319.       STOPIT = DNLD.SUB
  1320.       FOR I = 1 TO STOPIT
  1321.          IF DNLD$(I) <> "" THEN _
  1322.             GOTO 13583
  1323.          DNLD$(I) = DNLD$(I + 1)
  1324.          DNLD$(I + 1) = ""
  1325. 13583 NEXT
  1326.       DNLD.SUB = 0
  1327.       FOR I = 1 TO STOPIT
  1328.          IF DNLD$(I) <> "" THEN _
  1329.             DNLD.SUB = DNLD.SUB + 1
  1330.       NEXT
  1331.       RETURN
  1332. 13593 MAX = 3
  1333. 13599 CALL ASKRO (A$,24,HJ$)
  1334.       CALL ALLCAPS (HJ$)
  1335.       IF LEN(HJ$) < 1 OR LEN(HJ$) > MAX THEN _
  1336.          GOTO 13599
  1337.       I = 0
  1338.       GOSUB 25920
  1339.       IF I = 0 THEN _
  1340.          RETURN
  1341.       GOTO 13599
  1342. '
  1343. ' * IS THE DEFAULT TO HAVE THE PROMPT BELL ON AFTER EACH COMMAND?
  1344. '
  1345. 13750 CALL ASKRO ("Prompt bell default? (ON or OFF) ",24,PROMPT.BELL$)
  1346.       IF LEN(PROMPT.BELL$) < 1 OR _
  1347.          LEN(PROMPT.BELL$) > 3 THEN _
  1348.          GOTO 13750
  1349.       CALL ALLCAPS (PROMPT.BELL$)
  1350.       IF PROMPT.BELL$ = "ON"  THEN _
  1351.          RETURN
  1352.       IF PROMPT.BELL$ = "OFF" THEN _
  1353.          RETURN
  1354.       GOTO 13750
  1355. '
  1356. ' * SPECIFY THE MAXIMUM TIME A USER CAN STAY ON (THE DEFAULT)
  1357. '
  1358. 13840 CALL GETINIT ("Maximum minutes per session a user can stay on the system ",24,0,1440,MIN,CR)
  1359.       IF CR THEN _
  1360.          GOTO 13840
  1361.       MINUTES.PER.SESSION! = MIN
  1362.       RETURN
  1363. '
  1364. ' * ALLOW THE MAXIMUM NUMBER OF MESSAGES ALLOWED TO BE SELECTED
  1365. '
  1366. 13890 J = 999
  1367.       IF NOT MESSAGES.CAN.GROW THEN _
  1368.          IF ((MAX.MSG.FILE.SIZE.FRM.DEF! - 1 - MAXIUM.NUMBER.OF.NODES) / 5) < J THEN _
  1369.             J = (MAX.MSG.FILE.SIZE.FRM.DEF! - 1 - MAXIMUM.NUMBER.OF.NODES) / 5
  1370.       CALL GETINIT ("Set maximum number of messages allowed (MAX = " + _
  1371.             STR$(FIX(J)) + _
  1372.             ")",24,1,999,MAX.ALLOWED.MSGS.FRM.DEF,CR)
  1373.       IF CR THEN _
  1374.          GOTO 13890
  1375.       IF MAX.ALLOWED.MSGS.FRM.DEF < J + 1 THEN _
  1376.          GOTO 13929
  1377.       IF MESSAGES.CAN.GROW THEN _
  1378.          GOTO 13929
  1379.       CALL GETNUMYN ("Increase the " + _
  1380.                       MAIN.MESSAGE.FILE$ + _
  1381.                      " file to " + _
  1382.                        STR$((MAX.ALLOWED.MSGS.FRM.DEF * 5) + 1 + MAXIMUM.NUMBER.OF.NODES) + _
  1383.                      " records?",AB)
  1384.       IF NOT AB THEN _
  1385.          GOTO 13890
  1386. 13927 MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF
  1387.       GOSUB 30450
  1388.       B3! = (MAX.ALLOWED.MSGS.FRM.DEF * 5) + 1 + MAXIMUM.NUMBER.OF.NODES
  1389.       GOSUB 22080
  1390.       RETURN
  1391. 13929 MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF
  1392.       GOSUB 30450
  1393.       RETURN
  1394. 13940 CALL ANYINTEGER ("Set number of months before an inactive user is purged. ",ACT.MNTHS.B4.DELETING)
  1395.       IF ACT.MNTHS.B4.DELETING < 1 OR ACT.MNTHS.B4.DELETING > 12 THEN _
  1396.          GOTO 13940
  1397.       RETURN
  1398. 14120 COMMIN = 1
  1399.       COMMAX = 8
  1400.       CALL ANYINTEGER ("# of communication port to use (" + _
  1401.                    MID$(STR$(COMMIN),2) + _
  1402.                   "-" + _
  1403.                   MID$(STR$(COMMAX),2) + _
  1404.                   ", or 0 for LOCAL WORKSTATION)? ",X)
  1405.       IF X <> 0 AND (X < COMMIN OR X > COMMAX) THEN _
  1406.          GOTO 14120
  1407.       COM.PORT$ = "COM" + MID$(STR$(X),2)
  1408.       IF X = 0 THEN _
  1409.          LSB = 1016 : _
  1410.          RETURN
  1411. 14121 CALL GETNUMYN ("Use FOSSIL driver support",FOSSIL)
  1412.       IF FOSSIL THEN _
  1413.          GOTO 14125
  1414.       IF X < 3 THEN _
  1415.          GOTO 14123
  1416.       CALL GETNUMYN("BASIC does not support " + COM.PORT$ + ".  Do you wish to change it?",AB)
  1417.       IF AB THEN _
  1418.          GOTO 14120
  1419.       GOTO 14121
  1420. 14123 IF X = 1 THEN _
  1421.          LSB = 1016 _
  1422.       ELSE IF X = 2 THEN _
  1423.               LSB = 760
  1424.       IF PCJR THEN _
  1425.          LSB = 760
  1426.       RETURN
  1427. 14125 CALL ASKRO("Enter port address. e.g. 3F8? ",24,HJ$)
  1428.       B = LEN(HJ$)
  1429.       IF B < 3 OR B > 4 THEN _
  1430.          GOTO 14125
  1431. 14130 CALL ALLCAPS (HJ$)
  1432.       B = 3
  1433.       GOSUB 14789
  1434.       IF A < 0 THEN _
  1435.          GOTO 14125
  1436.       LSB = A
  1437.       B = 2
  1438.       GOSUB 14789
  1439.       IF A < 0 THEN _
  1440.          GOTO 14125
  1441.       LSB = LSB + A * 16
  1442.       B = 1
  1443.       GOSUB 14789
  1444.       IF A < 0 THEN _
  1445.          GOTO 14125
  1446.       LSB = LSB + A * 256
  1447.       RETURN
  1448. 14789 A = INSTR("0123456789ABCDEF",MID$(HJ$,B,1)) - 1
  1449.       RETURN
  1450. '
  1451. ' *  DRIVE AND NAME OF FILE CONTAINING THE BULLETIN FILES
  1452. '
  1453. 14790 GOSUB 15200
  1454.       DRIVE.FOR.BULLETINS$ = HJ$
  1455.       GOSUB 14970
  1456.       BULLETIN.MENU$ = HJ$
  1457.       RETURN
  1458. '
  1459. ' *  PREFIX USED TO NAME BULLETIN FILES
  1460. '
  1461. 14800 GOSUB 14970
  1462.       IF LEN(HJ$) > 6 THEN _
  1463.          RETURN
  1464.       BULLETIN.PREFIX$ = HJ$
  1465.       RETURN
  1466. '
  1467. ' *  DRIVE AND PATH FOR THREE MAJOR 'HELP' FILES
  1468. '
  1469. 14810 GOSUB 15200
  1470.       HELP.PATH$ = HJ$
  1471.       RETURN
  1472. 14815 GOSUB 15200
  1473.       QUES.PATH$ = HJ$
  1474.       RETURN
  1475. '
  1476. ' *  PREFIX FOR FOR FOUR MAJOR 'HELP' FILES                          ' KG081402
  1477. '
  1478. 14820 GOSUB 14970
  1479.       IF LEN(HJ$) > 7 THEN _
  1480.          RETURN
  1481.       HELP.FILE.PREFIX$ = HJ$
  1482.       HELP$(3) = HELP.FILE.PREFIX$ + "3"                             ' KG081402
  1483.       HELP$(4) = HELP.FILE.PREFIX$ + "4"                             ' KG081402
  1484.       HELP$(7) = HELP.FILE.PREFIX$ + "7"                             ' KG081402
  1485.       HELP$(9) = HELP.FILE.PREFIX$ + "9"                             ' KG081402
  1486.       RETURN
  1487. '
  1488. ' *  NAME OF 'NEWUSER' FILE
  1489. '
  1490. 14825 A$ = "File extension for help files (max 3 chars)"
  1491.       GOSUB 13593
  1492.       HELP.EXTENSION$ = HJ$
  1493.       RETURN
  1494. 14830 GOSUB 17340
  1495.       NEWUSER.FILE$ = HJ$
  1496.       RETURN
  1497. '
  1498. ' *  NAME OF 'WELCOME' FILE
  1499. '
  1500. 14840 GOSUB 17340
  1501.       WELCOME.FILE$ = HJ$
  1502.       RETURN
  1503. 14845 CALL ASKRO ("Extension for compressed files",24,HJ$)
  1504.       IF LEN(HJ$) > 3 THEN _                                         ' KG080101
  1505.          GOTO 14845
  1506.       CALL ALLCAPS (HJ$)
  1507.       DEFAULT.EXTENSION$ = HJ$
  1508.       RETURN
  1509. '
  1510. ' *  NAME OF 'FILE DIRECTORY' FILE'S EXTENSION
  1511. '
  1512. 14850 A$ = "Extension for RBBS directory files (3 char. max)."
  1513.       GOSUB 13593
  1514.       DIRECTORY.EXTENTION$ = HJ$
  1515.       RETURN
  1516. 14855 CALL ASKRO ("Alternate extension for RBBS directory files ",24,HJ$)
  1517.       IF LEN(HJ$) > 3 THEN _
  1518.          GOTO 14855
  1519.       CALL ALLCAPS (HJ$)
  1520.       ALTDIR.EXTENSION$ = HJ$
  1521.       RETURN
  1522. 14857 A$ = "PREFIX of name of directory of directories "
  1523.       MAX = 8
  1524.       GOSUB 13599
  1525.       DIRECTORY.PREFIX$ = HJ$
  1526.       RETURN
  1527. '
  1528. ' *  NAME OF THE SYSOP'S MENU
  1529. '
  1530. 14860 GOSUB 17340
  1531.       MENU$(1) = HJ$
  1532.       RETURN
  1533. '
  1534. ' *  NAME OF MAIN MESSAGES SUBSECTION'S MENU
  1535. '
  1536. 14870 GOSUB 17340
  1537.       MENU$(2) = HJ$
  1538.       RETURN
  1539. '
  1540. ' *  NAME OF FILE SUBSECTION'S MENU
  1541. '
  1542. 14880 GOSUB 17340
  1543.       MENU$(3) = HJ$
  1544.       RETURN
  1545. '
  1546. ' *  NAME OF UTILITIES SUBSECTION'S MENU
  1547. '
  1548. 14890 GOSUB 17340
  1549.       MENU$(4) = HJ$
  1550.       RETURN
  1551. '
  1552. ' *  NAME OF MENU LISTING THE CONFERENCES THAT ARE AVAILABLE
  1553. '
  1554. 14900 GOSUB 17340
  1555.       CONFERENCE.MENU$ = HJ$
  1556.       RETURN
  1557. '
  1558. ' *  GET ANSWER MENU
  1559. '
  1560. 14905 GOSUB 17340
  1561.       ANS.MENU$ = HJ$
  1562.       RETURN
  1563. '
  1564. ' *  NAME OF FILE CONTAINING UNACCEPTABLE USER NAMES
  1565. '
  1566. 14910 GOSUB 17340
  1567.       TRASHCAN.FILE$ = HJ$
  1568.       RETURN
  1569. 14915 CALL ASKRO ("Help for uploader to categorize is",24,UPCAT.HELP$)
  1570.       IF LEN(UPCAT.HELP$) > 7 THEN 14915
  1571.       CALL ALLCAPS (UPCAT.HELP$)
  1572.       RETURN
  1573. '
  1574. ' *  DRIVE AVAILABLE FOR UPLOADING
  1575. '
  1576. 14920 A$ = "uploading "
  1577.       GOSUB 13253
  1578.       DRIVE.FOR.UPLOADS$ = HJ$
  1579.       IF LEN(UPLOAD.SUBDIR$) > 1 THEN _
  1580.          MID$(UPLOAD.SUBDIR$,1,1) = DRIVE.FOR.UPLOADS$
  1581.       RETURN
  1582. '
  1583. ' *  ADDITIONAL COMPRESSED FILE EXTENSIONS
  1584. '
  1585. 14930 LOCATE 25,1
  1586.       PRINT "ex: .ARC.PAK.ZIP 'NONE' to clear, [RETURN] keeps ";COMPRESSED.EXT$;
  1587.       CALL ASKRO ("Other extensions to check for duplicates on upload",24,HJ$)
  1588.       IF HJ$ = "" THEN _
  1589.          RETURN
  1590.       CALL ALLCAPS (HJ$)
  1591.       CALL REMOVE (HJ$," ,></\[]:;|+=")
  1592.       COMPRESSED.EXT$ = HJ$
  1593.       IF COMPRESSED.EXT$ = "NONE" THEN _
  1594.          COMPRESSED.EXT$ = NONE.PICKED$ : _
  1595.          RETURN
  1596.       IF LEFT$(COMPRESSED.EXT$,1) <> "." THEN _
  1597.          COMPRESSED.EXT$ = "."+ COMPRESSED.EXT$
  1598.       IF RIGHT$(COMPRESSED.EXT$,1) = "." THEN _
  1599.          COMPRESSED.EXT$ = LEFT$(COMPRESSED.EXT$, LEN(COMPRESSED.EXT$)-1)
  1600.       RETURN
  1601. '
  1602. ' * GENERALIZED ROUTINE TO SELECT FILE NAME FOR ANY OPTION WITHIN CONFIG
  1603. '
  1604. 14970 X$ = OPTION$
  1605. 14980 CALL ASKRO ("Specify name of the file for parameter " + X$ + ".",24,HJ$)
  1606.       CALL ALLCAPS (HJ$)
  1607.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 12 THEN _
  1608.          GOTO 14980
  1609.       L1 = INSTR(HJ$,".")
  1610.       IF L1 = 0 THEN _
  1611.          IF LEN(HJ$) < 9 THEN _                                      ' KG081403
  1612.             GOTO 15045 _                                             ' KG081403
  1613.          ELSE GOTO 14980                                             ' KG081403
  1614.       IF L1 > 9 THEN _
  1615.          GOTO 14980
  1616.       IF L1 < 2 THEN _
  1617.          GOTO 14980
  1618.       IF LEN(HJ$) - L1 > 3 THEN _
  1619.          GOTO 14980
  1620. 15045 I = 0
  1621.       GOSUB 25920
  1622.       IF I = 0 THEN _
  1623.          RETURN
  1624.       GOTO 14980
  1625. '
  1626. ' * GENERALIZED ROUTINE TO SPECIFY A DISK DRIVE FOR ANY OPTION WITHIN CONFIG
  1627. '
  1628. 15170 CALL ASKRO ("Specify drive in the range A->" + _
  1629.                    M$ + _
  1630.                   " for parameter " + _
  1631.                    X$ + _
  1632.                   ". ",24,HJ$)
  1633.       IF LEN(HJ$) <> 1 THEN _
  1634.          GOTO 15170
  1635.       CALL ALLCAPS (HJ$)
  1636.       IF HJ$ < "A" OR HJ$ > M$ THEN _
  1637.          GOTO 15170
  1638.       TB$ = HJ$
  1639.       RETURN
  1640. '
  1641. ' *  GENERALIZED ROUTINE FOR SPECIFYING DRIVE/PATH
  1642. '
  1643. 15200 X$ = "parameter " + OPTION$
  1644. 15205 CALL ASKRO ("Specify drive/path (A->" + M$ + ") for " + X$ + ".",24,HJ$)
  1645.       IF LEN(HJ$) < 1 THEN _
  1646.          GOTO 15205
  1647.       CALL ALLCAPS (HJ$)
  1648.       IF LEN(HJ$) = 1 THEN _
  1649.          HJ$ = HJ$ + ":"
  1650.       IF MID$(HJ$,2,1) = ":" THEN _
  1651.         IF LEFT$(HJ$,1) < "A" OR LEFT$(HJ$,1) > M$ THEN _
  1652.            GOTO 15205
  1653.       IF LEN(HJ$) > 2 THEN _
  1654.         IF RIGHT$(HJ$,1) <> "\" THEN _
  1655.            HJ$ = HJ$ + "\"
  1656.       STRNG$ = HJ$
  1657.       GOSUB 60470
  1658.       IF NOT IS.OK THEN _
  1659.          GOTO 15205
  1660.       TB$ = HJ$
  1661.       RETURN
  1662. 15230 RETURN
  1663. 15234 CALL ANYNUMBER ("Extend by what fraction of time uploading ",UPLOAD.TIME.FACTOR!)
  1664.       IF UPLOAD.TIME.FACTOR! <= 1.0 THEN _
  1665.          RETURN
  1666.       CLS
  1667.       LOCATE 10,1
  1668.       PRINT "     An upload time credit factor > 1 means that uploaders may get more"
  1669.       PRINT "     time credited than their total session time.   Such a credit normally"
  1670.       PRINT "     survives only for the day on which the upload is made."
  1671.       CALL GETNUMYN ("Make upload time credits survive forever until used",KEEP.TIME.CREDITS)
  1672.       RETURN
  1673. 15240 CALL MMINTEGER ("How many seconds of delay after modem initilization (1 to 99)?",1,99,MODEM.INIT.WAIT.TIME)
  1674.       RETURN
  1675. 15250 CALL MMINTEGER ("# seconds to delay prior to issuing modem commands (1 to 99)?",1,99,MODEM.COMMAND.DELAY.TIME) ' KG072902
  1676.       RETURN
  1677. 15290 CALL MMINTEGER ("Enter number of active 'bulletins' (0 to 99)",0,99,ACTIVE.BULLETINS)
  1678.       RETURN
  1679. 15310 CALL ANYINTEGER ("Min security to read new PRIVATE messages",PRIVATE.READ.SEC)
  1680.       RETURN
  1681. 15320 CALL ANYINTEGER ("Min security to read new PUBLIC messages",PUBLIC.READ.SEC)
  1682.       RETURN
  1683. 15330 CALL ANYINTEGER ("Min security to change msg read security",SEC.CHANGE.MSG)
  1684.       RETURN
  1685. '
  1686. ' * DETERMINE THE NAME OF THE "MESSAGES" FILE
  1687. '
  1688. 15460 GOSUB 17340
  1689.       MAIN.MESSAGE.FILE$ = HJ$
  1690.       CALL BRKFNAME (HJ$,X1$,X2$,X3$,TRUE)                           ' DA082104
  1691.       MAIN.MESSAGE.BACKUP$ = X1$ + X2$ + ".BAK"                      ' DA082104
  1692.       MAINMSG$ = MAIN.MESSAGE.FILE$
  1693.       RETURN
  1694. '
  1695. ' * DETERMINE THE NAME OF THE "CALLERS" FILE
  1696. '
  1697. 15461 GOSUB 15200
  1698.       CALL GETNUMYN ("Do you want a caller's activity to be logged to a file",X)
  1699.       IF NOT X THEN _
  1700.          CALLERS.FILE$ = TB$ : _
  1701.          RETURN
  1702.       GOSUB 14970
  1703.       CALLERS.FILE$ = TB$ + HJ$
  1704.       RETURN
  1705. '
  1706. ' * DETERMINE THE NAME OF THE "COMMENTS" FILE
  1707. '
  1708. 15464 GOSUB 17340
  1709.       COMMENTS.FILE$ = HJ$
  1710.       RETURN
  1711. 15466 GOSUB 17340
  1712.       FAST.FILE.LIST$ = HJ$
  1713.       RETURN
  1714. 15468 GOSUB 17340
  1715.       FAST.FILE.LOCATOR$ = HJ$
  1716.       RETURN
  1717. '
  1718. ' * DETERMINE THE NAME OF THE "USERS" FILE
  1719. '
  1720. 15500 GOSUB 17340
  1721.       MAIN.USER.FILE$ = HJ$
  1722.       MAINUSR$ = MAIN.USER.FILE$
  1723.       RETURN
  1724. 15530 CALL GETCOLOR ("Foreground",FG)
  1725.       CALL ASKRO ("Make foreground [N]ormal, or I)ntense (bright)",24,ANS$)
  1726.       CALL ALLCAPS (ANS$)
  1727.       IF LEFT$(ANS$,1) = "I" THEN _
  1728.          FG = FG + 8
  1729.       RETURN
  1730. 15590 CALL GETCOLOR ("Background",BG)
  1731.       RETURN
  1732. 15650 CALL GETCOLOR ("Border",BORDER)
  1733.       RETURN
  1734.  
  1735. '
  1736. ' * SHOULD RBBS-PC'S DEFAULT HAYES COMMANDS BE USED?
  1737. '
  1738. 15710 CLS
  1739.       GOSUB 15780
  1740.       PRINT "         Currently Specified Modem Commands are:"
  1741.       PRINT
  1742.       PRINT "  Note:  '{' means embed carriage return  '~' means delay 1 sec"
  1743.       PRINT
  1744.       PRINT "1. Reset the modem                : " + USER.RESET.COMMAND$
  1745.       PRINT ""
  1746.       PRINT "2. Initialize the modem           : " + USER.INIT.COMMAND$
  1747.       PRINT "   Note: Item 2 MUST contain one of the following:"          ' DA080503
  1748.       PRINT "            S0=001  (to answer on 0 rings)"                  ' DA080503
  1749.       PRINT "            S0=254  (to answer on >0 rings, no ring-back)"   ' DA080503
  1750.       PRINT "            S0=255  (to answer on >0 rings, with ring-back"
  1751.       PRINT ""
  1752.       PRINT "3. Count the number of rings      : " + USER.COUNT.RINGS.COMMAND$
  1753.       PRINT ""
  1754.       PRINT "4. Answer the phone               : " + USER.ANSWER.COMMAND$
  1755.       PRINT ""
  1756.       PRINT "5. Take the phone off the hook    : " + USER.GO.OFFHOOK.COMMAND$
  1757.       PRINT ""
  1758.       PRINT "6. Clear the modem's firmware     : " + USER.FIRMWARE.CLEAR.CMND$
  1759.       PRINT ""
  1760.       PRINT "7. Initialize modem's firmware    : " + USER.INITIALIZE.COMMAND$ ' DA080503
  1761.       PRINT ""
  1762.       PRINT "8. Write to modem's firmware      : " + USER.FIRMWARE.WRITE.CMND$
  1763.       CALL GETINIT ("Command to change (1 to 8), CR to end, or 0 to reset to defaults",24,0,8,I,CR)
  1764.       IF CR THEN _
  1765.          RETURN
  1766.       IF I <> 0 THEN _
  1767.          GOTO 15711
  1768.       GOSUB 15790
  1769.       GOTO 15710
  1770. 15711 CALL ASKRO ("Enter modem command for item" + _
  1771.                    STR$(I) + _
  1772.                   " :",24,HJ$)
  1773.       CALL ALLCAPS (HJ$)
  1774.       ON I GOTO 15712,15714,15716,15718,15720,15722,15724,15726
  1775. 15712 USER.RESET.COMMAND$ = HJ$
  1776.       GOTO 15710
  1777. 15714 USER.INIT.COMMAND$ = HJ$
  1778.       GOTO 15710
  1779. 15716 USER.COUNT.RINGS.COMMAND$ = HJ$
  1780.       GOTO 15710
  1781. 15718 USER.ANSWER.COMMAND$ = HJ$
  1782.       GOTO 15710
  1783. 15720 USER.GO.OFFHOOK.COMMAND$ = HJ$
  1784.       GOTO 15710
  1785. 15722 USER.FIRMWARE.CLEAR.CMND$ = HJ$
  1786.       GOTO 15710
  1787. 15724 USER.INITIALIZE.COMMAND$ = HJ$
  1788.       GOTO 15710
  1789. 15726 USER.FIRMWARE.WRITE.CMND$ = HJ$
  1790.       GOTO 15710
  1791. 15780 RETURN
  1792. 15790 CALL SELMODEM                                                  ' DA080503
  1793.       RETURN
  1794. 15800 CALL GETNUMYN ("Remind users of the messages they left?",MESSAGE.REMINDER)
  1795.       RETURN
  1796. 15820 CALL GETNUMYN ("Use machine language routines for speed",TURBO.RBBS)
  1797.       RETURN
  1798. 15825 CALL GETNUMYN ("Not BASIC = use DOS calls (need for local color graphics)",USE.BASIC.WRITES)
  1799.       RETURN
  1800. 15830 CALL GETNUMYN ("Look no further when command not found in current section",RESTRICT.VALID.CMDS)
  1801.       RETURN
  1802. 15835 CALL GETNUMYN ("YES means to stop rather than scroll away previous text",MENUS.CAN.PAUSE)
  1803.       RETURN
  1804. 15840 CALL GETNUMYN ("Are system bulletins to be optional?",BULLETINS.OPTIONAL)
  1805.       RETURN
  1806. 15850 GOSUB 15200
  1807.       MACRO.DRVPATH$ = HJ$
  1808.       RETURN
  1809. 15860 CALL GETNUMYN ("Use macros",AB)
  1810.       IF NOT AB THEN _
  1811.          MACRO.EXTENSION$ = "" : _
  1812.          RETURN
  1813. 15862 A$ = "File extension for macro files (3 chars required)"
  1814.       CALL ASKRO (A$,24,MACRO.EXTENSION$)
  1815.       IF LEN(MACRO.EXTENSION$) <> 3 THEN _
  1816.          GOTO 15862
  1817.       CALL ALLCAPS(MACRO.EXTENSION$)                                 ' DA082105
  1818.       RETURN
  1819. 15880 CALL GETNUMYN ("Is non-ascii protocol required for binary files?",REQUIRE.NON.ASCII)
  1820.       RETURN
  1821. 15920 CALL GETYESNO ("Is " + _
  1822.                       DIRECTORY.EXTENTION$ + _
  1823.                       " omitted from the N)ew command?",OMIT.MAIN.DIRECTORY$)
  1824.       RETURN
  1825. 15991 CALL GETNUMYN ("Do you want EXTENDED logging to the 'callers' file",EXTENDED.LOGGING)
  1826.       RETURN
  1827. 15993 CALL GETNUMYN ("Do you want 'comments' recorded as private messages",COMMENTS.AS.MESSAGES)
  1828.       RETURN
  1829. 16000 CALL GETNUMYN ("Is system 'welcome' interruptable",WELCOME.INTERRUPTABLE)
  1830.       RETURN
  1831. 16031 CALL MMINTEGER ("Seconds users can be idle before being logged off",1,32400,WAIT.BEFORE.DISCONNECT)
  1832.       RETURN
  1833. 16032 CALL MMINTEGER ("Size of stack space to be set aside",1,32767,SIZE.OF.STACK)
  1834.       RETURN
  1835. 16033 CALL MMINTEGER ("Security level exempt from 'epi-log'",1,32767,SECURITY.EXEMPT.FROM.EPILOG)
  1836.       RETURN
  1837. '
  1838. ' * IDENTIFY THE TYPE OF PC THAT RBBS-PC WILL BE RUNNING ON
  1839. '
  1840. 16040 CLS
  1841.       LOCATE 5,5
  1842.       PRINT "Please select the type of PC which RBBS-PC will be running on  :"
  1843.       LOCATE 7,10
  1844.       PRINT "0.   IBM PC/XT/AT/PS2..."
  1845.       LOCATE 9,10
  1846.       PRINT "1.   Compaq/Plus or compatable that uses interrupt 7F"
  1847.       LOCATE 11,10
  1848.       PRINT "2.   IBM PCjr
  1849.       LOCATE 13,10
  1850.       PRINT "3.   Other compatable under IBM's DOS (i.e. PC-DOS)
  1851. 16050 CALL GETINIT ("Select environment (0 to 3, CR to end)",24,0,3,COMPUTER.TYPE,CR)
  1852.       IF CR THEN _
  1853.          RETURN
  1854. 16062 ON COMPUTER.TYPE+1 GOTO 16063,16064,16065,16066
  1855. 16063 COMPUTER.TYPE$ = "IBM PC/XT/AT/PS2..."
  1856.       RETURN
  1857. 16064 COMPUTER.TYPE$ = "Compaq/Plus"
  1858.       RETURN
  1859. 16065 COMPUTER.TYPE$ = "PCjr"
  1860.       GOTO 16071
  1861. 16066 COMPUTER.TYPE$ = "Other under PC-DOS"
  1862.       RETURN
  1863. 16071 CALL GETNUMYN ("Is an IBM PCjr Internal Modem installed? (YES or NO)",PCJR)
  1864.       IF PCJR THEN _
  1865.          LSB = 760
  1866. 16073 RETURN
  1867. 16121 CALL GETNUMYN ("Wait to issue modem commands between rings?",COMMANDS.BETWEEN.RINGS)
  1868.       RETURN
  1869. 16124 CALL MMREAL ("Enter baud rate (300,1200,2400,4800,9600,19200,38400) open modem at ",300!,38400!,B1!)
  1870.       IF B1! = 300 OR B1! = 1200 OR B1! = 2400 OR B1! = 4800 OR B1! = 9600 OR _
  1871.          B1! = 19200 OR B1! = 38400 THEN _
  1872.             GOTO 16128 _
  1873.       ELSE GOTO 16124
  1874. 16128 IF FOSSIL OR B1! < 38400 THEN _
  1875.          GOTO 16129
  1876.       CLS
  1877.       LOCATE 5,13
  1878.       PRINT "38400 available only with FOSSIL driver"
  1879.       LOCATE 6,10
  1880.       PRINT "First set communications port and fossil driver"
  1881.       CALL ASKRO ("  INITIAL BAUD RATE not changed.  Press [ENTER] to continue",10,ANS$)
  1882.       RETURN
  1883. 16129 MODEM.INIT.BAUD$ = MID$(STR$(B1!),2)
  1884.       RETURN
  1885. '
  1886. ' *  NAME OF MENU CONTAINING THE LIST OF AVAILABLE 'DOORS'
  1887. '
  1888. 16130 GOSUB 17340
  1889.       MENU$(5) = HJ$
  1890.       RETURN
  1891. '
  1892. ' * NAME OF THE FILE BUILT DYNAMICALLY BY RBBS-PC TO EXIT TO A 'DOOR'
  1893. '
  1894. 16140 GOSUB 17340
  1895.       RCTTY.BAT$ = HJ$
  1896.       RETURN
  1897. '
  1898. ' * NAME OF FILE TO RE-INVOKE RBBS-PC WHEN RETURNING FROM A 'DOOR'
  1899. '
  1900. 16150 GOSUB 17340
  1901.       RBBS.BAT$ = HJ$
  1902.       RETURN
  1903. '
  1904. ' * DRIVE/PATH TO LOOK FOR 'COMMAND.COM' ON
  1905. '
  1906. 16160 GOSUB 15200
  1907.       DISK.FOR.DOS$ = HJ$
  1908.       RETURN
  1909. 16170 CALL GETNUMYN ("Redirect I/O via the CTTY command on dropping to DOS?",REDIRECT.IO.METHOD)
  1910. 16175 CALL GETNUMYN ("Redirect I/O via a device named in CONFIG.SYS?",B1)
  1911.       IF B1 THEN _
  1912.          GOTO 16176
  1913.       USE.DEVICE.DRIVER$ = ""
  1914.       RETURN
  1915. 16176 IF LEN (USE.DEVICE.DRIVER$) > 0 THEN _
  1916.          GOTO 16177
  1917.       CALL ASKRO("Enter name of the device to use. ",24,USE.DEVICE.DRIVER$)
  1918.       IF LEN (USE.DEVICE.DRIVER$) > 8 THEN _
  1919.          GOTO 16176
  1920.       IF LEN (USE.DEVICE.DRIVER$) = 0 THEN _
  1921.          RETURN
  1922. 16177 CALL GETNUMYN ("Use the device named " + USE.DEVICE.DRIVER$ + "?",B1)
  1923.       IF B1 THEN _
  1924.          RETURN
  1925.       USE.DEVICE.DRIVER$ = ""
  1926.       GOTO 16176
  1927. 16290 CALL GETNUMYN ("Is the 'door' subsystem available?",DOORS.AVAILABLE)
  1928.       IF NOT DOORS.AVAILABLE THEN _
  1929.          RETURN
  1930.       CALL GETNUMYN ("Will you be running RBBS-PC under MultiLink? ",AB)
  1931.       IF AB THEN _
  1932.          GOTO 16350
  1933. 16340 DELAY! = FNTI! + 15
  1934. '
  1935. ' * NOTIFY THE SYSOP OF THE CONDITIONS FOR USING RBBS-PC "DOORS"
  1936. '
  1937.       CLS
  1938.       PRINT "                ******Warning******"
  1939.       PRINT "IBM's DOS absolutely REQUIRES any software package running"
  1940.       PRINT "as a 'door' (i.e. via a communication port) to monitor the"
  1941.       PRINT "communication port!  Otherwise your system will be vulnerable"
  1942.       PRINT "to being hung -- and worse!!!   Be wary of using doors if"
  1943.       PRINT "don't THROUGHLY understand the doors section in RBBS-PC's"
  1944.       PRINT "documentation and the pitfalls of using 'doors'!"
  1945. 16345 GOSUB 60440
  1946.       CLS
  1947.       PRINT "                ******Warning******"
  1948.       PRINT "Some environments require that you set the modem to answer"
  1949.       PRINT "on zero rings (i.e. 'auto-answer').  This is perilous to"
  1950.       PRINT "using doors because if a user in a door gets disconnected"
  1951.       PRINT "the modem is set to answer on the very next ring and someone who"
  1952.       PRINT "you may not want in the door or in DOS will find themselves"
  1953.       PRINT "able to do you grevious harm, though some environments and"
  1954.       PRINT "modems work fine."
  1955.       PRINT ""
  1956.       CALL GETNUMYN ("Are you sure you want to use doors",SHOOT.YOURSELF)
  1957.       RETURN
  1958. 16350 CLS
  1959. 16360 LOCATE 23,1
  1960.       PRINT "Current Multi-Link terminal type for DOORS is ";DOORS.TERMINAL.TYPE
  1961. 16370 CALL MMINTEGER ("Enter Multi-Link terminal type for DOORS ",0,12,DOORS.TERMINAL.TYPE)
  1962.       RETURN
  1963. 16650 CALL ANYINTEGER ("MAX # of minutes per day (0 = no limit)",MAX.PER.DAY)
  1964.       RETURN
  1965. 16690 CALL GETNUMYN ("Remind users of # uploads and downloads?",REMIND.FILE.TRANSFERS)
  1966.       RETURN
  1967. 16722 CALL GETNUMYN ("Remind users of their terminal's profile?",REMIND.PROFILE)
  1968.       RETURN
  1969. 16725 CALL GETNUMYN ("Are you using a non-Hayes auto-answer only modem?",DUMB.MODEM)
  1970.       RETURN
  1971. 16730 CALL MMINTEGER ("Default user page length?(a value between 0 and 255)",0,255,PAGE.LENGTH)
  1972.       RETURN
  1973. 16790 CALL MMINTEGER ("Maximum number of lines allowed per message (1-99)",1,99,MAX.MESSAGE.LINES)
  1974.       RETURN
  1975. 16795 CALL MMINTEGER ("Max. # of lines allowed in extended upload description (0-99)",0,99,MAX.EXTENDED.LINES)
  1976.       RETURN
  1977. 17160 CALL ANYINTEGER ("Security level for parameter " + _
  1978.                         HJ$ + _
  1979.                        " is? ",MINIMUM.LOGON.SECURITY)
  1980.       RETURN
  1981. 17170 CALL ANYINTEGER ("Security level for parameter " + _
  1982.                         HJ$ + _
  1983.                        " is? ",DEFAULT.SECURITY.LEVEL)
  1984.       RETURN
  1985. 17180 CALL ANYINTEGER ("Security level for parameter " + _
  1986.                         HJ$ + _
  1987.                        " is? ",SYSOP.SECURITY.LEVEL )
  1988.       RETURN
  1989. '
  1990. ' * FILE CONTAINING FILE NAMES WITH DOWNLOAD SECURITY
  1991. '
  1992. 17190 GOSUB 17340
  1993.       FILESEC.FILE$ = HJ$
  1994.       RETURN
  1995. 17200 CALL ANYINTEGER ("Security level for parameter " + _
  1996.                         HJ$ + _
  1997.                        " is? ",SYSOP.MENU.SECURITY.LEVEL)
  1998.       RETURN
  1999. 17210 CALL ANYINTEGER ("MIN security required to add extended upload description",ASK.EXTENDED.DESC)
  2000.       RETURN
  2001. 17215 CALL ANYINTEGER ("Registration door applies to new users & whose security <=",MAX.REG.SEC)
  2002.       RETURN
  2003. 17220 CALL MMINTEGER("MAXIMUM # security violations allowed (0=no limit)",0,99,MAXIMUM.VIOLATIONS)
  2004.       RETURN
  2005. 17230 CALL SECURE ("SYSOP",SYSOP.COMMANDS.DEFAULTS$,NUM.SYSOP,SYSOP.FUNCTION$(),SYSOP.FUNCTION(),SYSOP.COMMANDS$)
  2006.       RETURN
  2007. 17240 CALL SECURE ("Main Menu",MAIN.COMMANDS.DEFAULTS$,NUM.MAIN,MAIN.FUNCTION$(),MAIN.FUNCTION(),MAIN.COMMANDS$)
  2008.       RETURN
  2009. 17250 CALL SECURE ("File Menu",FILE.COMMANDS.DEFAULTS$,NUM.FILES,FILES.FUNCTION$(),FILES.FUNCTION(),FILE.COMMANDS$)
  2010.       RETURN
  2011. 17260 CALL SECURE ("Utilities",UTIL.COMMANDS.DEFAULTS$,NUM.UTILITY,UTILITY.FUNCTION$(),UTILITY.FUNCTION(),UTIL.COMMANDS$)
  2012.       RETURN
  2013. 17264 CALL SECURE ("Global",GLOBAL.COMMANDS.DEFAULTS$,NUM.GLOBAL,GLOBAL.FUNCTION$(),GLOBAL.FUNCTION(),GLOBAL.COMMANDS$)
  2014.       RETURN
  2015. '
  2016. ' * FILE NAME CONTAINING SPECIAL TEMPORARY PASSWORDS WITH TEMPORARY PRIVILEGES
  2017. '
  2018. 17270 GOSUB 17340
  2019.       PASSWORD.FILE$ = HJ$
  2020.       RETURN
  2021. 17280 CALL ASKRO("Name of file shown for security breaches (prefix ONLY)",24,HJ$) ' KG030301
  2022.       IF LEN(HJ$) > 8 OR INSTR(HJ$,".") > 0 THEN _
  2023.          GOTO 17280
  2024.       IF LEN(HJ$) < 1 THEN _
  2025.          SECVIO.HLP$ = NONE.PICKED$ : _
  2026.          RETURN
  2027.       CALL ALLCAPS (HJ$)
  2028.       SECVIO.HLP$ = HELP.PATH$ + HJ$ + "." + HELP.EXTENSION$
  2029.       RETURN
  2030. 17290 CALL MMINTEGER ("Maximum number of password changes is? (0 or more) ",0,99,MAXIMUM.PASSWORD.CHANGES)
  2031.       RETURN
  2032. 17300 CALL ANYINTEGER ("Security level for parameter " + _
  2033.                         HJ$ + _
  2034.                        " is? ",MINIMUM.SECURITY.FOR.TEMP.PASSWORD)
  2035.       RETURN
  2036. 17310 CALL ANYINTEGER ("Security level for overwriting files on upload is? ",OVERWRITE.SECURITY.LEVEL)
  2037.       RETURN
  2038. 17316 CALL ANYINTEGER ("Security level for parameter " + _
  2039.                         HJ$ + _
  2040.                        " is? ",SEC.LVL.EXEMPT.FRM.PURGING)
  2041.       RETURN
  2042. '
  2043. ' *  STANDARD ROUTINE TO SIMPLY SPECIFY A DRIVE LETTER FOR ANY OPTION
  2044. '
  2045. 17340 GOSUB 15200
  2046.       GOSUB 14970
  2047.       IF IPAGE = 6 AND ILOOKUP = 9 AND HJ$ = "NONE" THEN _
  2048.       IF MID$(HJ$,2,1) <> ":" THEN _
  2049.          BEEP : _
  2050.          GOTO 17340
  2051.       IF HJ$ = "NONE" THEN _
  2052.          RETURN
  2053.       HJ$ = TB$ + HJ$
  2054.       RETURN
  2055. 17500 CALL GETNUMYN ("Show section in command prompt",SHOW.SECTION)
  2056.       RETURN
  2057. 17550 CALL GETNUMYN ("Show commands in command prompt",COMMANDS.IN.PROMPT)
  2058.       RETURN
  2059. 17560 CALL GETNUMYN ("Let new users set their preferences",NEWUSER.SETS.DEFAULTS)
  2060.       RETURN
  2061. 17570 CALL GETNUMYN ("Add new users to USERS file",REMEMBER.NEW.USERS)
  2062.       RETURN
  2063. 17580 CALL GETNUMYN ("Log on new users even when USERS file full",SURVIVE.NOUSER.ROOM)
  2064.       RETURN
  2065. 17590 CALL GETNUMYN ("Limit file searches to FMS directory",LIMIT.SEARCH.TO.FMS)
  2066.       RETURN
  2067. 17600 CALL GETNUMYN ("Enable download of new files at logon",NEW.FILES.CHECK)
  2068.       RETURN
  2069. 17610 CALL GETNUMYN ("Turn printer off after each recycle",TURN.PRINTER.OFF)
  2070.       RETURN
  2071. 17620 CALL GETNUMYN ("Play music themes for RBBS functions",MUSIC)
  2072.       RETURN
  2073. 17625 CALL GETNUMYN ("Use order on directory of directories (no=sort)",USE.DIR.ORDER)
  2074.       RETURN
  2075. 17630 CALL GETNUMYN ("RESTRICT callers using SUBSCRIPTION period",RESTRICT.BY.DATE)
  2076.       RETURN
  2077. 17635 CALL ANYINTEGER ("Security that lets caller READ & KILL all messages",SEC.KILL.ANY)
  2078.       RETURN
  2079. 17640 CALL ANYINTEGER ("Adopt change in main security for all users with sec <",AUTO.UPGRADE.SEC)
  2080.       RETURN
  2081. 17645 CALL GETNUMYN ("Send multi-file ASCII download as one big file",PERSONAL.CONCAT)
  2082.       RETURN
  2083. 17650 CALL GETNUMYN ("Force check every time whether can AUTODOWNLOAD",ASK.IDENTITY)
  2084.       RETURN
  2085. 17700 CALL GETNUMYN ("Require all callers to answer a questionnaire",AB)
  2086.       IF NOT AB THEN _
  2087.          REQUIRED.QUESTIONNAIRE$ = NONE.PICKED$ : _
  2088.          RETURN
  2089.       GOSUB 17340
  2090.       GOSUB 17740
  2091.       REQUIRED.QUESTIONNAIRE$ = HJ$
  2092.       RETURN
  2093. 17710 GOSUB 17340
  2094.       PRELOG$ = HJ$
  2095.       RETURN
  2096. 17720 CALL GETNUMYN ("Require all NEW users to answer a questionnaire",AB)
  2097.       IF NOT AB THEN _
  2098.          NEW.USER.QUESTIONNAIRE$ = NONE.PICKED$ : _
  2099.          RETURN
  2100.       GOSUB 17340
  2101.       GOSUB 17740
  2102.       NEW.USER.QUESTIONNAIRE$ = HJ$
  2103.       RETURN
  2104. 17725 GOSUB 17340
  2105.       GOSUB 17740
  2106.       AUTOPAGE.DEF$ = HJ$
  2107.       RETURN
  2108. 17730 GOSUB 17340
  2109.       GOSUB 17740
  2110.       EPILOG$ = HJ$
  2111.       RETURN
  2112. 17740 IF INSTR(HJ$,".") = 0 THEN _
  2113.          HJ$ = HJ$ + ".DEF"
  2114.       RETURN
  2115. 17800 CALL MMINTEGER ("Match personal downloads starting at what column in user record",1,128,PERSONAL.BEGIN)
  2116.       RETURN
  2117. 17805 OK = TRUE
  2118.       IF NOT ENFORCE.UPLOAD.DOWNLOAD.RATIOS THEN _
  2119.          RETURN
  2120.       IF START.WRITE > 100 THEN _
  2121.          RETURN
  2122.       IF START.WRITE < 82 AND _
  2123.          START.WRITE + LEN.WRITE < 82 THEN _
  2124.          RETURN
  2125.       OK = FALSE
  2126. 17806 CALL ASKRO ("Parameter 47 precludes using this part of USERS record. [ENTER] continues",24,A$)
  2127.       RETURN
  2128. 17810 CALL MMINTEGER ("Match personal downloads using how many chars in user record",1,128,PERSONAL.LEN)
  2129.       RETURN
  2130. 17820 CALL ASKRO ("Protocol for personal downloads [ENTER] for none)",24,PERSONAL.PROTOCOL$)
  2131.       IF LEN(PERSONAL.PROTOCOL$) > 1 THEN _
  2132.          GOTO 17820
  2133.       IF PERSONAL.PROTOCOL$ = "" THEN _
  2134.          PERSONAL.PROTOCOL$ = "N"
  2135.       CALL ALLCAPS (PERSONAL.PROTOCOL$)
  2136.       RETURN
  2137. 17830 CALL ASKRO ("Prompt for first field caller asked (What is your..)",24,FIRST.NAME.PROMPT$)
  2138.       RETURN
  2139. 17840 CALL ASKRO ("Prompt for second field caller asked (What is your..)",24,LAST.NAME.PROMPT$)
  2140.       RETURN
  2141. 17845 CALL ASKRO ("Ask callers for [e.g. CITY/STATE] (What is your...)",24,USER.LOCATION$)
  2142.       RETURN
  2143. 17850 CALL GETNUMYN ("Enforce upload/download ratios",ENFORCE.UPLOAD.DOWNLOAD.RATIOS)
  2144.       IF NOT ENFORCE.UPLOAD.DOWNLOAD.RATIOS THEN _
  2145.          RETURN
  2146.       IF START.INDIV > 100 THEN _
  2147.          RETURN
  2148.       IF START.INDIV < 82 AND _
  2149.          START.INDIV + LEN.INDIV < 82 THEN _
  2150.          RETURN
  2151.       ENFORCE.UPLOAD.DOWNLOAD.RATIOS = FALSE
  2152.       GOTO 17806
  2153. 18000 CALL ASKUPOS ("Specify field in USERS file that will identify callers",_
  2154.                     START.HASH,LEN.HASH,PROMPT.HASH$)
  2155. 18002 IF START.HASH < 1 OR LEN.HASH < 1 THEN _
  2156.         BEEP : _
  2157.         GOTO 18000
  2158.       IF START.HASH = 1 THEN _
  2159.          HASH.ID$ = "(NAME)"_
  2160.       ELSE HASH.ID$ = "(nonstandard)"
  2161.       START.WRITE = START.HASH
  2162.       LEN.WRITE = LEN.HASH
  2163.       GOSUB 17805
  2164.       IF NOT OK THEN _
  2165.          START.HASH = 1 : _
  2166.          LEN.HASH = 31 : _
  2167.          GOTO 18002
  2168.       RETURN
  2169. 18100 CALL ASKUPOS ("Use what field to distinguish callers with same ID?",_
  2170.                     START.INDIV,LEN.INDIV,PROMPT.INDIV$)
  2171. 18102 IF START.INDIV = 0 OR LEN.INDIV = 0 THEN_
  2172.         INDIV.ID$ = NONE.PICKED$ _
  2173.       ELSE INDIV.ID$ = "(nonstandard)"
  2174.       START.WRITE = START.INDIV
  2175.       LEN.WRITE = LEN.INDIV                                          ' KG060103
  2176.       GOSUB 17805
  2177.       IF NOT OK THEN _
  2178.          START.INDIV = 0 : _
  2179.          LEN.INDIV = 31 : _
  2180.          GOTO 18102
  2181.       START.WRITE = START.INDIV
  2182.       RETURN
  2183. 18200 CALL ASKRO ("New default category code",24,DEFAULT.CATEGORY.CODE$)
  2184.       CALL ALLCAPS (DEFAULT.CATEGORY.CODE$)
  2185.       IF LEN(DEFAULT.CATEGORY.CODE$) > 3 THEN _
  2186.          DEFAULT.CATEGORY.CODE$ = LEFT$(DEFAULT.CATEGORY.CODE$,3) _
  2187.       ELSE DEFAULT.CATEGORY.CODE$ = DEFAULT.CATEGORY.CODE$ + _
  2188.                                     SPACE$(3 - LEN(DEFAULT.CATEGORY.CODE$))
  2189.       RETURN
  2190. 18300 GOSUB 15200
  2191.       CALL ASKRO ("New file of directory categories",24,DIR.CATEGORY.FILE$)
  2192.       DIR.CATEGORY.FILE$ = TB$ + _
  2193.                            DIR.CATEGORY.FILE$
  2194.       RETURN
  2195. 18310 GOSUB 17340
  2196.       MAIN.PUI$ = HJ$
  2197.       CALL BRKFNAME (MAIN.PUI$,X1$,X2$,X3$,TRUE)
  2198.       IF X3$ = "" THEN _
  2199.          MAIN.PUI$ = X1$ + X2$ + ".PUI"
  2200.       RETURN
  2201. 18330 CALL GETNUMYN ("Should DOORS be TIME-LOCKED",TIME.LOCK)
  2202.       CALL GETNUMYN ("Should DOWNLOADS be TIME-LOCKED",Q)
  2203.       TIME.LOCK = -TIME.LOCK + 2 * -Q
  2204.       RETURN
  2205. 18340 CALL ANYINTEGER ("MINIMUM security for turbo logon",ALLOW.CALLER.TURBO)
  2206.       RETURN
  2207. 18345 CALL ANYINTEGER ("MINIMUM security to add dir entry for pre-existing file",ADD.DIR.SECURITY)
  2208.       RETURN
  2209. 18350 CALL ASKRO ("Copy upload description to upload dir AND to (Drv/path/name)",24,ALWAYS.STREW.TO$)
  2210.       CALL ALLCAPS (ALWAYS.STREW.TO$)
  2211.       RETURN
  2212. 18360 CALL ASKRO ("'ALL' lists what dirs ('@<file>' if list,[ENTER]=none)",24,MASTER.DIRECTORY.NAME$)
  2213.       CALL ALLCAPS (MASTER.DIRECTORY.NAME$)
  2214.       RETURN
  2215. 18400 CALL MMINTEGER ("New max length of upload description (40-46)",40,46,MAX.DESC.LEN)
  2216.       RETURN
  2217. 18500 CALL ANYINTEGER ("Min security to view new uploads",MIN.SEC.TO.VIEW)
  2218.       RETURN
  2219. 18510 CALL ANYINTEGER ("SECURITY level callers gets when SUBSCRIPTION period EXPIRES",EXPIRED.SECURITY)
  2220.       RETURN
  2221. 18515 CALL ANYINTEGER ("Min security for uploader to assign a category",SL.CATEGORIZE.UPLOADS)
  2222.       RETURN
  2223. 18520 CALL MMINTEGER ("Default # days in SUBSCRIPTION PERIOD",0,32000,DAYS.IN.SUBSCRIPTION.PERIOD)
  2224.       RETURN
  2225. 18530 CALL MMINTEGER ("# days left in subscription before start WARNING",0,32000,DAYS.TO.WARN)
  2226.       RETURN
  2227. 18540 CALL MMINTEGER ("# seconds to WAIT for DTR to drop",0,30,DTR.DROP.DELAY)
  2228.       RETURN
  2229. 18545 IF MAIN.MESSAGE.FILE$ = MAINMSG$ THEN _
  2230.          XX$ = "Parameter " + _
  2231.             OPTION$ + _
  2232.             " only valid during CONFERENCE maintenence!" : _
  2233.          GOSUB 50345 : _
  2234.          DELAY! = FNTI! + 5 : _
  2235.          GOSUB 60440 : _
  2236.          RETURN
  2237.       CALL ANYINTEGER ("Minimum security level to 'AUTO ADD' to conference",AUTO.ADD.SECURITY)
  2238.       AUTO.ADD.SECURITY$ = MID$(STR$(AUTO.ADD.SECURITY),2)
  2239.       RETURN
  2240. '
  2241. ' *  GET UPLOAD DIRECTORY DRIVE/PATH
  2242. '
  2243. 18550 GOSUB 15200
  2244.       UPLOAD.PATH$ = HJ$
  2245.       RETURN
  2246. 18600 GOSUB 15200
  2247.       DIRECTORY.PATH$ = HJ$
  2248.       RETURN
  2249. 18620 GOSUB 17340
  2250.       PROTO.DEF$ = HJ$
  2251.       RETURN
  2252. 18625 GOSUB 17340
  2253.       DOORS.DEF$ = HJ$
  2254.       RETURN
  2255. 18630 GOSUB 15200
  2256.       IF INSTR(PERSONAL.DIR$, PERSONAL.DRVPATH$) = 1 THEN _
  2257.          PERSONAL.DIR$ = HJ$ + MID$(PERSONAL.DIR$, LEN(PERSONAL.DRVPATH$)+1)
  2258.       PERSONAL.DRVPATH$ = HJ$
  2259.       RETURN
  2260. 18640 CALL GETNUMYN ("Is there an external DOOR to check Callers",AB)
  2261.       IF NOT AB THEN _
  2262.          REGISTRATION.PROGRAM$ = NONE.PICKED$ : _
  2263.          RETURN
  2264.       GOSUB 17340
  2265.       REGISTRATION.PROGRAM$ = HJ$
  2266.       RETURN
  2267. 18700 CALL GETNUMYN ("Set most critical parameters",AB)
  2268.       IF NOT AB THEN _
  2269.          RETURN
  2270.       HJ$ = CHR$(13)
  2271. '
  2272. ' * SET THE MOST CRITICAL PARAMETERS
  2273.  
  2274.  
  2275. ' * 162 = environment
  2276. ' * 161 = max # nodes
  2277.  
  2278.  
  2279. ' *   8 = max sess time
  2280. ' *   9 = max day time
  2281. ' * 221 = comm port
  2282. ' * 224 = ring to answer
  2283. ' * 228 = baud rate
  2284.  
  2285. '
  2286.      KSTACKED$ =   "8" + HJ$ +   "9" + HJ$ + _
  2287.                   "12" + HJ$ +  "29" + HJ$ + _
  2288.                  "121" + HJ$ + "123" + HJ$
  2289.      KSTACKED$ = KSTACKED$ + _
  2290.                  "124" + HJ$ + "161" + HJ$ + _
  2291.                  "162" + HJ$ + "221" + HJ$ + _
  2292.                  "224" + HJ$ + "228" + HJ$
  2293.      IX = 1
  2294.      RETURN
  2295. 18800 CALL GETNUMYN ("Set the Parameters new in " + CONFIG.VERSION$,AB)
  2296.       IF NOT AB THEN _
  2297.          RETURN
  2298.       HJ$ = CHR$(13)
  2299. '
  2300. ' * SET THE PARAMETERS NEW TO THIS RELEASE OF RBBS-PC
  2301. ' * 169 = Additional compressed file extensions
  2302. ' * 267 = Sorted list for Fast File Search
  2303. ' * 268 = Location list for Fast File Search
  2304. '
  2305.       KSTACKED$ = "169" + HJ$ + "267" + HJ$ + _
  2306.                   "268" + HJ$
  2307.       IPAGE = 1
  2308.       RETURN
  2309. '
  2310. ' * LET THE SYSOP SPECIFY THE NUMBER OF RECORDS IN THE USER FILE
  2311. '
  2312. 19189 IF CONFERENCE.MODE = 2 THEN _
  2313.          GOSUB 22560 : _
  2314.          RETURN
  2315.       GOSUB 22100
  2316.       RETURN
  2317. '
  2318. ' * ALLOW THE USER TO SPECIFY THE MAXIMUM NUMBER OF RBBS-PC'S TO CONFIGURE FOR
  2319. '
  2320. 20000 LOCATE 18,1
  2321.       PRINT "NOTE:  PC-SIG believes that it is illegal to charge users for"
  2322.       PRINT "       downloading from the PC-SIG Library on a per download"
  2323.       PRINT "       basis.  Subscription fees of a reasonable nature are"
  2324.       PRINT "       acceptable."
  2325.       A$ = "Specify Library disk in the range A->" + M$ + "(or NONE) "
  2326.       MAX = 4
  2327.       GOSUB 13599
  2328.       LIBRARY.DRIVE$ = HJ$
  2329.       IF LEN(HJ$) > 1 AND HJ$ <> "NONE" THEN _
  2330.          GOTO 20000
  2331.       IF LIBRARY.DRIVE$ = "NONE" THEN _
  2332.          LIBRARY.DRIVE$ = "" _
  2333.       ELSE LIBRARY.DRIVE$ = LIBRARY.DRIVE$ + ":"
  2334.       RETURN
  2335. '
  2336. ' * LIBRARY DIRECTORY/PATH
  2337. '
  2338. 20010 GOSUB 15200
  2339.       LIBRARY.DIRECTORY.PATH$ = HJ$
  2340.       RETURN
  2341. '
  2342. ' *  NAME OF 'LIBRARY DIRECTORY' FILE'S EXTENSION
  2343. '
  2344. 20020 A$ = "Name of Library directory extension "
  2345.       GOSUB 13593
  2346.       LIBRARY.DIRECTORY.EXTENTION$ = HJ$
  2347.       RETURN
  2348. '
  2349. ' * LIBRARY WORKING DISK
  2350. '
  2351. 20030 GOSUB 15200
  2352.       LIBRARY.WORK.DISK.PATH$ = HJ$
  2353.       RETURN
  2354. 20040 CALL MMINTEGER ("Max number of disks on Library (1-9999)",1,9999,LIBRARY.MAX.DISK)
  2355.       RETURN
  2356. 20050 CALL MMINTEGER ("Max number of directories on Library (1-999)",1,999,LIBRARY.MAX.DIRECTORY)
  2357.       RETURN
  2358. 20060 CALL MMINTEGER ("Number of subdirectories for each master (1-999)",1,999,LIBRARY.MAX.SUBDIR)
  2359.       RETURN
  2360. '
  2361. ' * PREFIX OF LIBRARY SUBDIRECTORY
  2362. '
  2363. 20070 A$ = "Prefix name of Library subdirectories in each master "
  2364.       MAX = 4
  2365.       GOSUB 13599
  2366.       LIBRARY.SUBDIR.PREFIX$ = HJ$
  2367.       RETURN
  2368. '
  2369. ' *  NAME OF FILE SUBSECTION'S MENU
  2370. '
  2371. 20080 GOSUB 17340
  2372.       MENU$(6) = HJ$
  2373.       RETURN
  2374. '
  2375. ' *  ASSIGN SECURITY LEVELS TO THE LIBRARY MENU'S COMMANDS
  2376. '
  2377. 20090 CALL SECURE ("LIBRARY",LIBRARY.COMMANDS.DEFAULTS$,NUM.LIBRARY,LIBRARY.FUNCTION$(),LIBRARY.FUNCTION(),LIBRARY.COMMANDS$)
  2378.       RETURN
  2379. '
  2380. ' * DRIVE/PATH FOR ARCHIVE UTILITY
  2381. '
  2382. 20100 GOSUB 15200
  2383.       LIBRARY.ARCHIVE.PATH$ = HJ$
  2384.       RETURN
  2385. '
  2386. ' * PROCESS NAME OF ARCHIVE UTILITY
  2387. '
  2388. 20110 CALL ASKRO ("Name of Archive utility ",24,HJ$)
  2389.       CALL ALLCAPS (HJ$)
  2390.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 8 THEN _
  2391.          GOTO 20110
  2392.       LIBRARY.ARCHIVE.PROGRAM$ = HJ$
  2393.       CALL ASKRO ("Archive command ",24,HJ$)
  2394.       CALL ALLCAPS (HJ$)
  2395.       IF LEN(HJ$) > 8 THEN _
  2396.          GOTO 20110
  2397.       LIBRARY.ARCHIVE.PROGRAM$ = LIBRARY.ARCHIVE.PROGRAM$ + _
  2398.                                  " " + _
  2399.                                  HJ$
  2400.       RETURN
  2401. 21750 CALL MMINTEGER ("Maximum number of concurrent RBBS-PC's? (1 - 36)",1,36,B1)
  2402.       IF MAXIMUM.NUMBER.OF.NODES = B1 THEN _
  2403.          RETURN
  2404.       B3! = MAX.MSG.FILE.SIZE.FRM.DEF!
  2405.       GOSUB 30610
  2406.       RETURN
  2407. 21760 CALL MMINTEGER ("Size of internal BUFFER for text files (32-4096)",32,4096,BUFFER.SIZE)
  2408.       RETURN
  2409. 21770 CALL MMINTEGER ("Size of internal BUFFER for Uploads (128-8192)",128,8192,WRITE.BUF.DEF)
  2410.       RETURN
  2411. 21780 CALL MMINTEGER ("Max # of work variables in questionnaire/macros (13-99)",13,99,MAX.WORK.VAR)
  2412.       RETURN
  2413. '
  2414. ' * IDENTIFY THE NETWORK TYPES THAT RBBS-PC CAN RUN IN
  2415. '
  2416. 21810 SUBROUTINE.PARAMETER = 1
  2417. 21820 CALL NETTYPE
  2418.       RETURN
  2419. 21895 SUBROUTINE.PARAMETER = 2
  2420.       GOTO 21820
  2421. '
  2422. ' * IDENTIFY THE VOICE SYNTHESIZER TYPES THAT RBBS-PC CAN SUPPORT
  2423. '
  2424. 21900 SUBROUTINE.PARAMETER = 1
  2425. 21903 CALL VOICETYPE
  2426.       RETURN
  2427. 21905 SUBROUTINE.PARAMETER = 2
  2428.       GOTO 21903
  2429. '
  2430. ' * ALLOW THE SYSOP TO SELECT NUMBER OF RECORDS IN THE USER FILE
  2431. '
  2432. 21910 IF CONFERENCE.MODE = 2 THEN _
  2433.          GOSUB 22560 : _
  2434.          RETURN
  2435.       GOSUB 22100
  2436.       RETURN
  2437. '
  2438. ' * ALLOW THE SYSOP TO SELECT HOW RBBS-PC IS TO RECYCLE WHEN A USER LOGS OFF
  2439. '
  2440. 21950 CALL ASKRO ("How to recycle when users log off (<S>YSTEM or <I>NTERNAL)? ",24,HJ$)
  2441.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 8 THEN _
  2442.          GOTO 21950
  2443.       CALL ALLCAPS (HJ$)
  2444.       IF LEFT$(HJ$,1) = "S" THEN _
  2445.          HJ$ = "SYSTEM" : _
  2446.          RECYCLE.TO.DOS = 1 : _
  2447.          GOTO 22020
  2448.       IF LEFT$(HJ$,1) = "I" THEN _
  2449.          HJ$ = "INTERNAL" : _
  2450.          RECYCLE.TO.DOS = 0 : _
  2451.          GOTO 22020
  2452.       GOTO 21950
  2453. 22020 RECYCLE.TO.DOS$ = HJ$
  2454.       RETURN
  2455. 22030 IF NETWORK.TYPE = 2 THEN _
  2456.          CALL ASKRO ("OMNI-NET cannot let message file grow.  Press [Enter] to continue",24,HJ$) : _
  2457.          RETURN
  2458.       CALL GETNUMYN ("Message file GROWS rather than FIXED in size",MESSAGES.CAN.GROW)
  2459.       RETURN
  2460. '
  2461. ' * ALLOW THE SYSOP TO SPECIFY THE MAXIMUM NUMBER OF RECORDS IN MESSAGES FILE
  2462. '
  2463. 22040 CALL ANYNUMBER ("Max. records in preformatted " + _
  2464.                        MAIN.MESSAGE.FILE$ + _
  2465.                       " file (>" + _
  2466.                        STR$(5*MAX.ALLOWED.MSGS.FRM.DEF + 1 + MAXIMUM.NUMBER.OF.NODES) + "):",B3!)
  2467.       IF B3! <= (5 * MAX.ALLOWED.MSGS.FRM.DEF + 1 + MAXIUM.NUMBER.OF.NODES) OR _
  2468.          B3! > 9999999! THEN _
  2469.          GOTO 22040
  2470. 22080 B1 = MAXIMUM.NUMBER.OF.NODES
  2471.       GOSUB 30610
  2472.       MAX.MSG.FILE.SIZE.FRM.DEF! = B3!
  2473.       RETURN
  2474. '
  2475. ' * BUILD THE USERS FILE TO SUIT
  2476. '
  2477. 22100 FF = CURRENT.USER.COUNT
  2478.       IF FF > 1 THEN _
  2479.          FF = FF - 1
  2480.       CALL ANYINTEGER (STR$(FF) + _
  2481.                        " of" + _
  2482.                        STR$(HIGHEST.USER.RECORD) + _
  2483.                        " records used. Enter new max # of records for " + _
  2484.                        MAIN.USER.FILE$ + _
  2485.                        ":",B1)
  2486. 22120 IF B1 < 1 OR B1 > 99999! OR _
  2487.          B1 < FF THEN _
  2488.          GOTO 22100
  2489. 22140 B2 = 2
  2490.       WHILE B2 < B1
  2491.         B2 = B2 * 2
  2492.       WEND
  2493.       IF MAX.USR.FILE.SIZE.FRM.DEF = B2 THEN _
  2494.          RETURN
  2495.       CALL GETNUMYN ("Change " + _
  2496.                       MAIN.USER.FILE$ + _
  2497.                      " file to" + _
  2498.                       STR$(B2) + _
  2499.                      " records?",AB)
  2500.       IF NOT AB THEN _
  2501.          GOTO 22100
  2502. 22150 MAX.USR.FILE.SIZE.FRM.DEF = B2
  2503.       D.FLAG = -1
  2504.       GOSUB 24110
  2505.       IB = 1
  2506.       MAX.USR.FILE.SIZE.FRM.DEF = B2
  2507.       HIGHEST.USER.RECORD = B2
  2508.       GOSUB 30450
  2509.       RETURN
  2510. '
  2511. ' * COMMON ROUTINE TO NOTIFY THE USER WHEN READING DATA
  2512. '
  2513. 22340 LOCATE 22,1
  2514.       PRINT SPACE$(15) + _
  2515.             TIME$ + _
  2516.             " " + _
  2517.             SPACE$(64);
  2518.       LOCATE 22,35
  2519.       COLOR 0,7
  2520.       PRINT " Reading Data, Wait a sec !!! ";
  2521.       COLOR FG,BG,BORDER                                             ' KG073103
  2522. 22342 RETURN                                                         ' KG073103
  2523. '
  2524. ' * BEFORE EXITING, ASK USER IF HE WANTS TO WRITE OUT THE CHANGES OR QUIT
  2525. '
  2526. 22350 CALL ASKRO ("Save changes?  Y)es & exit, N)o - reedit, Q)uit don't save (Y,N,Q)",24,HJ$) ' KG080902
  2527.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 4 THEN _
  2528.          GOTO 22350                                                  ' KG081001
  2529.       CALL ALLCAPS (HJ$)
  2530.       AB = INSTR("NYQ",LEFT$(HJ$,1))                                 ' KG080903
  2531.       ON AB GOTO 12190,59000,60360                                   ' KG081001
  2532.       GOTO 22350                                                     ' KG081001
  2533. '
  2534. ' * ASK THE USER WHICH RBBS-PC.DEF FILE CONFIG IS TO WORK WITH
  2535. '
  2536. 22480 CALL MMINTEGER ("To which copy of RBBS-PC will these parameters apply (1 to 36)?",1,36,I)
  2537.       HJ$ = MID$(STR$(I),2)
  2538.       NODE.ID$ = MID$("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ",VAL(HJ$),1)
  2539.       MID$(CONFIG.FILENAME$,5,1) = NODE.ID$
  2540.       RETURN
  2541. 22550 CALL ASKRO ("Parameter " + _
  2542.                    OPTION$ + _
  2543.                   " unavailable with CONFIG " + _
  2544.                    CONFIG.VERSION$ + _
  2545.                   "!  CR to continue",24,A$)
  2546.       RETURN
  2547. 22560 CALL ASKRO ("Parameter " + _
  2548.                    OPTION$ + _
  2549.                   " unavailable maintaining public conference! CR to continue",24,XX$)
  2550.       RETURN
  2551. '
  2552. ' * REBUILD THE USER FILE
  2553. '
  2554. 22570 A$ = "Rebuild the User File"
  2555.       GOSUB 22580
  2556.       IF CONFERENCE.MODE = 2 THEN _
  2557.          GOSUB 22560 : _
  2558.          RETURN
  2559.       CALL GETNUMYN ("Would you like a printed list of deleted users", _
  2560.                      PRINT.DELETED)
  2561.       D.FLAG = 0
  2562.       GOSUB 24110
  2563.       RETURN
  2564. '
  2565. ' * GENERAL CONFIRMATION OF RESPONSES
  2566. '
  2567. 22580 CALL GETNUMYN ("Really "+A$,AB)
  2568.       PRINT
  2569.       IF NOT AB THEN _
  2570.          RETURN 22582
  2571. 22582 RETURN
  2572. '
  2573. ' * PACK THE MESSAGES FILE
  2574. '
  2575. 23160 A$ = "Pack the Message File"
  2576.       GOSUB 22580
  2577.       B1 = MAXIMUM.NUMBER.OF.NODES
  2578.       B3! = HIGHEST.MESSAGE.RECORD
  2579.       PURGE = -1
  2580.       GOSUB 30610
  2581.       RETURN
  2582. '
  2583. ' * POINT TO THE NEXT MESSAGE HEADER IN THE MESSAGE FILE
  2584. '
  2585. 23610 I = LOC(1) + VAL(MID$(MESSAGE.RECORD$,117,4)) - 1              ' KG072802
  2586.       RETURN
  2587. '
  2588. ' * REPAIR THE MESSAGES FILE
  2589. '
  2590. 23620 RB = 1
  2591.       A$ = "Repair Message File"
  2592.       GOSUB 22580
  2593. '
  2594. ' * PRINT THE HEADER RECORDS IN THE MESSAGES FILE
  2595. '
  2596. 23630 SK = 0
  2597.       GOSUB 30040              ' <----Print message headers
  2598.       FILNUM = 1
  2599.       GOSUB 30050
  2600.       FIELD 1,128 AS MESSAGE.RECORD$
  2601.       FOR I = FIRST.MESSAGE.RECORD TO NEXT.MESSAGE.RECORD - 1
  2602.          GET 1,I
  2603.          IF VAL(MID$(MESSAGE.RECORD$,117,4)) > 0 AND _
  2604.             SK < VAL(MID$(MESSAGE.RECORD$,2,4)) THEN _
  2605.             SK = VAL(MID$(MESSAGE.RECORD$,2,4)) : _
  2606.             GOSUB 23610 _
  2607.          ELSE GOTO 23725
  2608.          I$ = "K"
  2609.          IF MID$(MESSAGE.RECORD$,116,1) = CHR$(225) THEN _
  2610.             I$ = "A
  2611.          IF LOC(1) > NEXT.MESSAGE.RECORD - 1 THEN _
  2612.             GOTO 23730
  2613.          PRINT LEFT$(MESSAGE.RECORD$,5) + " " + _
  2614.                MID$(MESSAGE.RECORD$,76,25) + " " + _
  2615.                MID$(MESSAGE.RECORD$,101,15) + " " + _
  2616.                I$ + " " + _
  2617.                MID$(MESSAGE.RECORD$,117,4) + " " + _
  2618.                STR$(LOC(1)) + " "  + _
  2619.                STR$(I)
  2620.          SK = VAL(MID$(MESSAGE.RECORD$,2,4))
  2621.          IF RB AND VAL(MID$(MESSAGE.RECORD$,2,4)) = CALLS.TODATE! THEN _
  2622.             GOTO 23730
  2623.          IF RB THEN _
  2624.             GOSUB 50580
  2625. 23725 NEXT
  2626. 23730 GET 1,1
  2627.       MID$(MESSAGE.RECORD$,1,8) = SPACE$(8)
  2628.       MID$(MESSAGE.RECORD$,1,8) = STR$(SK)
  2629.       HJ$ = RIGHT$("0"+MID$(STR$(MAXIMUM.NUMBER.OF.NODES),2),2)
  2630.       MID$(MESSAGE.RECORD$,127,2) = HJ$
  2631.       PUT 1,1
  2632.       CLOSE 1
  2633.       DELAY! = FNTI! + 5
  2634.       GOSUB 60440
  2635.       RETURN
  2636. '
  2637. ' * ROUTINE TO INITIALIZE THE HAYES 2400 MODEM'S FIRMWARE
  2638. '
  2639. 23731 LOCATE 25,5
  2640.       COMPORT% = VAL(RIGHT$(COM.PORT$,1)) -1
  2641.       IF COMPORT% < 0 THEN _
  2642.          PRINT "COM port cannot be set while using COM0" : _
  2643.          DELAY! = FNTI! + 3 : _
  2644.          GOSUB 60440 : _
  2645.          RETURN
  2646.       FOS.BUF$ = SPACE$(80)                                          ' DA080502
  2647.       CLS                                                            ' DA080502
  2648.       PRINT "Setting modem firmware for RBBS-PC on " + COM.PORT$     ' DA080502
  2649.       IF NOT FOSSIL THEN _                                           ' DA080502
  2650.          GOTO 23732                                                  ' DA080502
  2651.       CALL FOSINIT(COMPORT%,RESULT%)                                 ' DA080502
  2652.       IF RESULT% = -1 THEN _                                         ' DA080502
  2653.          PRINT "ERROR initializing FOSSIL.  Firmware reset aborted." : _  ' DA080502
  2654.          GOTO 23736                                                  ' DA080502
  2655.       CALL FOSSPEED(COMPORT%,2400, 2, 3, 1)                          ' DA080502
  2656.       STATE% = 1                                                     ' DA080502
  2657.       CALL FOSDTR(COMPORT%,STATE%)                                   ' DA080502
  2658.       GOTO 23733                                                     ' DA081002
  2659. 23732 OUT MODEM.CONTROL.REGISTER,&H0                                 ' DA080501
  2660.       OUT LINE.CONTROL.REGISTER - 1,&H6                              ' DA080501
  2661.       OPEN COM.PORT$ + ":2400,N,8,1,CD,DS" AS #3                     ' DA080502
  2662. 23733 A$ = USER.FIRMWARE.CLEAR.CMND$ ' Clear to factory defaults     ' DA080502
  2663.       GOSUB 23736                                                    ' DA080502
  2664.       A$ = USER.INITIALIZE.COMMAND$  ' set up RBBS-PC config         ' DA080502
  2665.       GOSUB 23736                                                    ' DA080502
  2666.       A$ = USER.FIRMWARE.WRITE.CMND$ ' Write changes to NVRam        ' DA080502
  2667.       GOSUB 23736                                                    ' DA080502
  2668.       IF FOSSIL THEN _                                               ' DA080502
  2669.          STATE% = 0 : _                                              ' DA080502
  2670.          CALL FOSDTR(COMPORT%,STATE%) : _                            ' DA080502
  2671.          CALL FOSEXIT(COMPORT%) : _                                  ' DA080502
  2672.       ELSE CLOSE #3                                                  ' DA080502
  2673.       PRINT "Press a key to continue"                                ' DA080502
  2674.       WHILE INKEY$ = "" : WEND                                       ' DA080502
  2675.       RETURN                                                         ' DA080502
  2676. '                                                                    ' DA080502
  2677. ' * ROUTINE TO SEND/RECEIVE DATA FROM MODEM                          ' DA080502
  2678. '                                                                    ' DA080502
  2679. 23736 PRINT "Send:"                                                  ' DA080502
  2680.       WHILE INSTR(A$, "{")                                           ' DA080502
  2681.          MID$(A$, INSTR(A$,"{"), 1) = CHR$(13)                       ' DA081005
  2682.       WEND                                                           ' DA080502
  2683.       WHILE INSTR(A$, "~")                                           ' DA080502
  2684.          WAIT.FOUND = INSTR(A$,"~")                                  ' DA080502
  2685.          TEMP.A$ = MID$(A$, WAIT.FOUND + 1)                          ' DA080502
  2686.          A$ = LEFT$(A$, WAIT.FOUND - 1)                              ' DA080502
  2687.          GOSUB 23739                                                 ' DA080502
  2688.          DELAY! = FNTI! + 1                                          ' DA080502
  2689.          GOSUB 60440                                                 ' DA080502
  2690.          A$ = TEMP.A$                                                ' DA080502
  2691.       WEND                                                           ' DA080502
  2692.       A$ = A$ + CHR$(13)                                             ' DA081005
  2693.       GOSUB 23739                                                    ' DA080502
  2694.       DELAY! = FNTI! + 3                                             ' DA080502
  2695.       GOSUB 60440                                                    ' DA080502
  2696.       PRINT "Receive:"                                               ' DA080502
  2697.       IF NOT FOSSIL THEN _                                           ' DA080502
  2698.          GOTO 23738                                                  ' DA080503
  2699.       FOS.LEN% = 80                                                  ' DA080503
  2700.       CALL FOSREAD(COMPORT%, FOS.LEN%, FOS.BUF$)                     ' DA080502
  2701.       PRINT LEFT$(FOS.BUF$,FOS.LEN%)                                 ' DA080503
  2702.       RETURN                                                         ' DA080502
  2703. 23738 WHILE LOC(3) > 1                                               ' DA080502
  2704.          INPUT #3, A$                                                ' DA080502
  2705.          PRINT A$                                                    ' DA080502
  2706.       WEND                                                           ' DA080502
  2707.       RETURN                                                         ' DA080502
  2708. 23739 PRINT A$;                                                      ' DA080502
  2709.       IF NOT FOSSIL THEN_                                            ' DA080502
  2710.          PRINT #3, A$; _                                             ' DA080502
  2711.       ELSE _                                                         ' DA080502
  2712.          CALL FOSWRITE(COMPORT%,LEN(A$),A$)                          ' DA080502
  2713.       RETURN                                                         ' DA080502
  2714. '
  2715. ' * ROUTINE TO RENUMBER THE MESSAGE FILE
  2716. '
  2717. 23740 A$ = "Renumber the Message File"
  2718.       GOSUB 22580
  2719.       GOSUB 30040
  2720. 23750 REDIM MSG.XREF(MAXIMUM.NUMBER.OF.MSGS,2)                       ' KG072801
  2721.       MSG.XREF.INDX = 0                                              ' dd062790
  2722.       B1 = CALLS.TODATE!                                             ' dd062790
  2723.       CALL GETINIT ("Renumber starting with OLD message # (<" + _
  2724.                      STR$(CALLS.TODATE! + 1) + _
  2725.                     ")",24,1,B1,RE,CR)
  2726.       IF CR THEN _
  2727.          RETURN
  2728. 23810 CALL GETINIT ("Renumber starting with NEW message # ",24,1,9999,NE,CR)
  2729.       IF CR THEN _
  2730.          RETURN
  2731.       NE = NE - 1
  2732.       FILNUM = 1
  2733.       GOSUB 30050
  2734.       FIELD 1,128 AS MESSAGE.RECORD$
  2735.       FOR I  =  FIRST.MESSAGE.RECORD TO NEXT.MESSAGE.RECORD - 1
  2736.          GET 1,I
  2737.          X = ASC(MID$(MESSAGE.RECORD$,116))
  2738.          IF X = 225 OR X = 226 THEN _
  2739.             GOSUB 24010 : _
  2740.             GOSUB 23610
  2741.       NEXT
  2742.       GET 1,1
  2743.       MID$(MESSAGE.RECORD$,1,8) = SPACE$(8) ' Update the checkpoint record with the
  2744.       MID$(MESSAGE.RECORD$,1,8) = STR$(NE)  ' 1- 8  =  number of last message on system
  2745.       PUT 1,1
  2746.       CLOSE 1
  2747.       GOSUB 23905
  2748.       DELAY! = FNTI! + 1
  2749.       GOSUB 60440
  2750.       RETURN
  2751. '
  2752. ' *  RESET LAST MESSAGE READ TO ZERO
  2753. '
  2754. 23900 A$ = "Reset last message read for all users"                   ' dd062790
  2755.       GOSUB 22580
  2756. 23905 GOSUB 24020
  2757.       GOSUB 24025
  2758.       A! = HIGHEST.USER.RECORD
  2759.       XX$ = "Resetting Last Msg Read by User.  Processing Record #"  ' dd062790
  2760.       GOSUB 50345
  2761.       FOR J = 1 TO A!
  2762.          GET 1,J
  2763.          LOCATE 24,X
  2764.          PRINT J;
  2765.          HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
  2766.          LSET COMP.USER$ = HASH.VALUE$
  2767.          IF ASC(HASH.VALUE$) = 0 OR _
  2768.             COMP.USER$ = NEW.USER$ OR _
  2769.             COMP.USER$ = EMPTY.USER$ THEN _
  2770.               GOTO 23955
  2771.          FORMER.LAST.MSG = CVI(MID$(USER.OPTIONS$,3,2))              ' dd062790
  2772.          MSG.XREF.INDX = 1                                           ' KG072801
  2773. 23906    IF MSG.XREF.INDX > MAXIMUM.NUMBER.OF.MSGS THEN _            ' KG072801
  2774.             GOTO 23907                                               ' KG072801
  2775.             IF FORMER.LAST.MSG = MSG.XREF(MSG.XREF.INDX,1) THEN _    ' dd062790
  2776.                NEW.LAST.MSG = MSG.XREF(MSG.XREF.INDX,2) : _          ' dd062790
  2777.                GOTO 23907                                            ' KG072801
  2778.             IF FORMER.LAST.MSG < MSG.XREF(MSG.XREF.INDX,1) THEN _    ' dd062790
  2779.                NEW.LAST.MSG = MSG.XREF(MSG.XREF.INDX - 1,2) : _      ' dd062790
  2780.                GOTO 23907                                            ' KG072801
  2781.             MSG.XREF.INDX = MSG.XREF.INDX + 1                        ' KG072801
  2782.          GOTO 23906                                                  ' KG072801
  2783. 23907    IF FORMER.LAST.MSG = 0 THEN NEW.LAST.MSG = 0                ' KG072801
  2784.          MID$(USER.OPTIONS$,3,2) = MKI$(NEW.LAST.MSG)                ' dd062790
  2785.          PUT 1,J
  2786. 23955 NEXT
  2787.       CLOSE 1
  2788.       RETURN
  2789. 24010 LOCATE 24,15
  2790.       PRINT "Msg #" ; MID$(MESSAGE.RECORD$,1,5);
  2791.       CURRENT.MSG.NUMBER = VAL(MID$(MESSAGE.RECORD$,2,4))            ' dd062790
  2792.       IF CURRENT.MSG.NUMBER < RE THEN _                              ' dd062790
  2793.          PRINT " read"; : _
  2794.          MSG.XREF.INDX = MSG.XREF.INDX + 1 : _                       ' dd062790
  2795.          MSG.XREF(MSG.XREF.INDX, 1) = CURRENT.MSG.NUMBER : _         ' dd062790
  2796.          MSG.XREF(MSG.XREF.INDX, 2) = CURRENT.MSG.NUMBER : _         ' dd062790
  2797.          RETURN
  2798.       Y$ = MID$(MESSAGE.RECORD$,1,1)
  2799.       MID$(MESSAGE.RECORD$,1,5) = SPACE$(5)
  2800.       NE = NE + 1
  2801.       MID$(MESSAGE.RECORD$,1,5) = STR$(NE)
  2802.       MID$(MESSAGE.RECORD$,1,1) = Y$
  2803.       PRINT " renumbered as Msg #" + MID$(MESSAGE.RECORD$,1,5)
  2804.       PUT 1,I
  2805.       MSG.XREF.INDX = MSG.XREF.INDX + 1                              ' dd062790
  2806.       MSG.XREF(MSG.XREF.INDX, 1) = CURRENT.MSG.NUMBER                ' dd062790
  2807.       MSG.XREF(MSG.XREF.INDX, 2) = NE                                ' dd062790
  2808.       RETURN
  2809. '
  2810. ' * ROUTINE TO PACK THE USERS FILE
  2811. '
  2812. 24020 GOSUB 30060
  2813.       FIELD 1,  31 AS USER.NAME$, _
  2814.                 15 AS PASSWORD$, _
  2815.                  2 AS SECURITY.LEVEL$, _
  2816.                 14 AS USER.OPTIONS$, _
  2817.                 24 AS CITY.STATE$, _
  2818.                 19 AS MACHINE.TYPE$, _
  2819.                 14 AS LAST.DATE.TIME.ON$, _
  2820.                  3 AS LIST.NEW.DATE$, _
  2821.                  2 AS USER.DOWNLOADS$, _
  2822.                  2 AS USER.UPLOADS$, _
  2823.                  2 AS ELASPED.TIME$
  2824.       FIELD 1, 128 AS USER.RECORD$
  2825.       RETURN
  2826. '
  2827. ' *  SHARED ROUTINE TO SET UP USER PROCESSING
  2828. '
  2829. 24025 IF LEN.HASH < 7 THEN _
  2830.          NU = LEN.HASH _
  2831.       ELSE NU = 7
  2832.       NEW.USER$ = LEFT$("NEWUSER",NU)
  2833.       EMPTY.USER$ = SPACE$(NU)
  2834.       COMP.USER$ = EMPTY.USER$
  2835.       RETURN
  2836. 24040 CALL GETNUMYN ("Make Hilight if and only if color graphics selected",X)
  2837.       IF NOT X THEN _
  2838.          RETURN
  2839.       GOTO 24052
  2840. '
  2841. ' *  SET FLAG TO "FALSE" ON ANSWERED REQUIRED QUESTIONNAIRE AS DEFAULT
  2842. '
  2843. 24050 A$ = "Make all callers answer required questionnaire once"
  2844.       GOSUB 22580
  2845. 24052 GOSUB 24020
  2846.       GOSUB 24025
  2847.       A! = HIGHEST.USER.RECORD
  2848.       XX$ = "Processing Record #"
  2849.       GOSUB 50345
  2850.       FOR J = 1 TO A!
  2851.          GET 1,J
  2852.          LOCATE 24,X
  2853.          PRINT J;
  2854.          HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
  2855.          LSET COMP.USER$ = HASH.VALUE$
  2856.          IF ASC(HASH.VALUE$) = 0 OR _
  2857.             COMP.USER$ = NEW.USER$ OR _
  2858.             COMP.USER$ = EMPTY.USER$ THEN _
  2859.               GOTO 24055
  2860.          USER.OPTIONS = CVI(MID$(USER.OPTIONS$,9,2))
  2861.          IF ILOOKUP = 12 THEN _
  2862.             K = ((ASC(MID$(USER.OPTIONS$,6,1)) MOD 3) = 2) : _
  2863.             IF K THEN _
  2864.                USER.OPTIONS = USER.OPTIONS OR 1024 _ ' hilite
  2865.             ELSE USER.OPTIONS = USER.OPTIONS AND 1023 _ ' don't hilite
  2866.          ELSE USER.OPTIONS = USER.OPTIONS AND 1791 'Zero out Req Ques flag
  2867.          MID$(USER.OPTIONS$,9,2) = MKI$(USER.OPTIONS)
  2868.          PUT 1,J
  2869. 24055 NEXT
  2870.       CLOSE 1
  2871.       RETURN
  2872. '
  2873. ' COMMON ROUTINE TO EXPAND OR CONTRACT THE USER FILE
  2874. '
  2875. 24110 GOSUB 30040
  2876.       IF NO.OLD.FILE THEN _
  2877.          GOTO 24111
  2878.       GOSUB 24020
  2879.       GOSUB 50350
  2880.       A$ = F$
  2881.       GOSUB 50095
  2882. 24111 IF NETWORK.TYPE = 6 THEN _
  2883.          OPEN A$ FOR RANDOM SHARED AS #2 LEN = 128 _
  2884.       ELSE OPEN "R",2,A$,128
  2885.       FIELD 2,  31 AS USER.NAME.N$, _
  2886.                 15 AS PASSWORD.N$, _
  2887.                  2 AS SECURITY.LEVEL.N$, _
  2888.                 14 AS USER.OPTIONS.N$, _
  2889.                 24 AS CITY.STATE.N$, _
  2890.                 19 AS MACHINE.TYPE.N$, _
  2891.                 14 AS LAST.DATE.TIME.ON.N$, _
  2892.                  3 AS LIST.NEW.DATE.N$, _
  2893.                  2 AS USER.DOWN.LOADS.N$, _
  2894.                  2 AS USER.UPLOADS.N$, _
  2895.                  2 AS ELAPSED.TIME.N$
  2896.       FIELD 2, 128 AS USER.RECORD.N$
  2897.       CURRENT.MONTH = VAL(LEFT$(DATE$,2)) + (VAL(RIGHT$(DATE$,2)) * 12)
  2898.       A! = 0
  2899.       GOSUB 50840
  2900.       CURRENT.USER.COUNT = 1
  2901.       IF NO.OLD.FILE THEN _
  2902.          HIGHEST.USER.RECORD = A! : _
  2903.          MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD : _
  2904.          GOSUB 30450 : _
  2905.          RETURN
  2906.       A! = LOF(1) / 128.0!
  2907.       GOSUB 24025
  2908.       PURGED.COUNT = 0
  2909. 24112 FOR J  =  1 TO A!
  2910.          GET 1
  2911. 24114    HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
  2912.          LSET COMP.USER$ = HASH.VALUE$
  2913. 24116    MONTH.OF.LAST.LOGON = VAL(LEFT$(LAST.DATE.TIME.ON$,2)) + _
  2914.                                (VAL(MID$(LAST.DATE.TIME.ON$,7,2)) * 12)
  2915.          MONTHS.SINCE.LAST.LOGON = CURRENT.MONTH - MONTH.OF.LAST.LOGON
  2916.          IF COMP.USER$ = NEW.USER$ THEN _
  2917.             A$ = "" : _
  2918.             GOTO 24430
  2919.          X = ASC(HASH.VALUE$)
  2920.          IF X = 0 OR _
  2921.             COMP.USER$ = EMPTY.USER$ THEN _
  2922.             GOTO 24450
  2923.          Y = 1
  2924. 24280    IF X < 32 OR X > 126 THEN _
  2925.             A$ = "Bad name" : _
  2926.             GOTO 24430
  2927.          IF Y < LEN.HASH THEN _
  2928.             Y = Y + 1 : _
  2929.             X = ASC(MID$(HASH.VALUE$,Y,1)) : _
  2930.             GOTO 24280
  2931.          HJ$ = HASH.VALUE$
  2932.          CALL ALLCAPS (HJ$)
  2933.          IF HJ$ <> HASH.VALUE$ THEN _
  2934.             A$ = "Bad name" : _
  2935.             GOTO 24430
  2936.          HJ$ = "copied"
  2937.          IF D.FLAG THEN _
  2938.             GOTO 24290
  2939.          SECURITY.LEVEL = CVI(SECURITY.LEVEL$)
  2940.          IF SECURITY.LEVEL => SEC.LVL.EXEMPT.FRM.PURGING THEN _
  2941.             HJ$ = "exempt" : _
  2942.             GOTO 24290                           ' copy users exempt from purges
  2943.          IF SECURITY.LEVEL < MINIMUM.LOGON.SECURITY THEN _
  2944.             HJ$ = "locked" : _
  2945.             GOTO 24290                                 ' copy "locked-out" users
  2946.          IF MONTHS.SINCE.LAST.LOGON > ACT.MNTHS.B4.DELETING THEN _
  2947.             A$ = "(Last on " + LAST.DATE.TIME.ON$ + ") " + _
  2948.                  STR$(MONTHS.SINCE.LAST.LOGON) : _
  2949.             GOTO 24430                                     'Purge inactive users
  2950.          Y = 1
  2951. 24290    PRINT STR$(LOC(1)) ; ": " ; HASH.VALUE$ ; " " ; HJ$ ; "...";
  2952.          GOSUB 50720
  2953.          PRINT STR$(MONTHS.SINCE.LAST.LOGON)
  2954.          GOTO 24450
  2955. 24430    PRINT STR$(LOC(1)) ; ": " ; HASH.VALUE$ ; " ... purged " ; A$
  2956.          IF PRINT.DELETED THEN _
  2957.             LPRINT STR$(LOC(1)) ; ": " ; HASH.VALUE$ ; " ... purged " ; A$
  2958.          PURGED.COUNT = PURGED.COUNT + 1
  2959. 24450 NEXT
  2960.       CLOSE 1,2
  2961.       MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
  2962.       GOSUB 30450
  2963. 24730 PRINT PURGED.COUNT;" USERS PURGED"
  2964.       CALL GETNUMYN ("Delete the old " + _
  2965.                       MAIN.USER.FILE$ + _
  2966.                      " file?",AB)
  2967.       IF AB THEN _
  2968.          GOTO 24770
  2969. 24750 A$ = MAIN.USER.FILE$
  2970.       GOSUB 50096
  2971.       NAME MAIN.USER.FILE$ AS A$
  2972.       GOTO 24780
  2973. 24770 KILL MAIN.USER.FILE$
  2974. 24780 GOSUB 50350
  2975.       A$ = F$
  2976.       GOSUB 50095
  2977.       NAME A$ AS MAIN.USER.FILE$
  2978.       RETURN
  2979. 24790 CALL GETNUMYN ("Really check FMS directory",AB)
  2980.       IF NOT AB THEN _
  2981.          RETURN
  2982.       CALL CHKFMSDIR (DIRECTORY.PATH$ + FMS.DIRECTORY$ + "." + DIRECTORY.EXTENTION$,MAX.DESC.LEN + 36,DIR.CATEGORY.FILE$)
  2983.       RETURN
  2984. '
  2985. ' * ROUTINE TO RESET ACTIVE PRINTERS FOR ALL NODES
  2986. '
  2987. 24795 FILNUM = 2
  2988.       GOSUB 30050
  2989.       FIELD 2,128 AS RR$
  2990.       FOR J! = 2 TO MAXIMUM.NUMBER.OF.NODES + 1
  2991.          GET 2,J!
  2992.          MID$(RR$,38,2) = " 0"
  2993.          PUT 2,J!
  2994.       NEXT
  2995.       CLOSE 2
  2996.       RETURN
  2997. '
  2998. ' * ROUTINE TO DISPLAY THE PAGE HEADER FOR CONFIG'S DISPLAYS
  2999. '
  3000. 24800 CLS
  3001.       I! = FRE(C$)
  3002.       COLOR 0,7,0
  3003.       LOCATE 1,10
  3004.       PRINT "RBBS-PC Default Configuration " + CONFIG.VERSION$;      ' DA081003
  3005.       IF CONFERENCE.MODE THEN _
  3006.          GOSUB 24970
  3007.       COLOR FG,BG,BORDER
  3008.       PRINT " Page" + STR$(DISPLAYED.PAGE.NUMBER) + " of" + STR$(MAXIMUM.DISPLAYABLE.PAGES)
  3009.       RETURN
  3010. '
  3011. ' * ROUTINE TO DISPLAY CONFERENCE MAINTENANCE MODE IN CONFIG'S DISPLAYS
  3012. '
  3013. 24970 LOCATE 2,1
  3014.       PRINT SPACE$(10)
  3015.       LOCATE 2,10                                                    ' KG062303
  3016.       COLOR 31,0,0
  3017.       PRINT "(Conference Maintenance Mode for " + _                  ' KG062303
  3018.             ZConfName$ + _                                           ' KG062303
  3019.             ")";                                                     ' KG062303
  3020.       RETURN
  3021. '
  3022. ' * COMMON SUBROUTINE TO DISPLAY ACTIVITY WHEN PACKING/PURGING FILES
  3023. '
  3024. 25020 XX$ = "In file " + _
  3025.             MAIN.USER.FILE$ + _
  3026.             " " + _
  3027.             A$ + _
  3028.             " record"
  3029.       GOTO 25035
  3030. 25030 IF PURGE THEN _
  3031.          RETURN
  3032.       XX$ = A$ + _
  3033.             " file " + _
  3034.             MAIN.MESSAGE.FILE$ + _
  3035.             " record"
  3036. 25035 GOSUB 50345
  3037.       RETURN
  3038. '
  3039. ' * ALLOW THE SYSOP TO ENTER/EXIT/CHANGE CONFERENCE MAINTENANCE MODE
  3040. '
  3041. 25040 REFRESH = 0
  3042.       IF CONFERENCE.MODE = 0 THEN _
  3043.          GOTO 25050
  3044.       GOSUB 30100
  3045.       CALL GETNUMYN ("End conference maintenance?",AB)
  3046.       IF NOT AB THEN _
  3047.          GOTO 25050
  3048. 25044 MAIN.MESSAGE.FILE$ = MAINMSG$
  3049.       MAIN.USER.FILE$ = MAINUSR$
  3050.       REFRESH = 1
  3051.       RETURN
  3052. 25050 CALL ASKRO ("Enter the name of the conference (7 characters or less) ",24,HJ$)
  3053.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 7 THEN _
  3054.          GOTO 25040
  3055.       CALL ALLCAPS (HJ$)
  3056.       ZConfName$ = HJ$                                               ' KG062302
  3057.       CP$ = HJ$
  3058. 25090 CALL BRKFNAME (MAINMSG$,X1$,X2$,X3$,TRUE)                      ' DA082102
  3059.       FILE$ = X1$ + CP$ + "M.DEF"                                    ' DA082102
  3060.       MAIN.MESSAGE.FILE$ = FILE$                                     ' DA082501
  3061.       GOSUB 30000                                                    ' DA082501
  3062.       IF OKAY THEN _                                                 ' DA082501
  3063.          GOTO 25100                                                  ' DA082501
  3064.       CALL BRKFNAME (CONFERENCE.MENU$,X1$,X2$,X3$,TRUE)              ' DA082501
  3065.       FILE$ = X1$ + CP$ + "M.DEF"                                    ' DA082501
  3066.       GOSUB 30000                                                    ' DA082501
  3067.       IF OKAY THEN _                                                 ' DA082501
  3068.          MAIN.MESSAGE.FILE$ = FILE$                                  ' DA082501
  3069. 25100 CALL BRKFNAME (MAINUSR$,X1$,X2$,X3$,TRUE)                      ' DA082501
  3070.       FILE$ = X1$ + CP$ + "U.DEF"                                    ' DA082501
  3071.       MAIN.USER.FILE$ = FILE$                                        ' DA082501
  3072.       GOSUB 30000                                                    ' DA082501
  3073.       IF OKAY THEN _                                                 ' DA082501
  3074.          GOTO 25160                                                  ' DA082501
  3075.       FILE$ = CP$ + "U.DEF"                                          ' KG082501
  3076.       GOSUB 30000                                                    ' DA082501
  3077.       IF OKAY THEN _                                                 ' DA082501
  3078.          MAIN.USER.FILE$ = FILE$ : _                                 ' DA082501
  3079.          GOTO 25160                                                  ' DA082501
  3080. 25142 CALL GETNUMYN ("Make a user's file for this conference?",AB)   ' KG082501
  3081.       IF AB THEN _
  3082.          GOTO 25160
  3083. 25144 CONFERENCE.MODE = 2
  3084.       MAIN.USER.FILE$ = MAINUSR$                                     ' DA082501
  3085.       GOTO 25170
  3086. 25160 CONFERENCE.MODE = 1                                            ' DA082501
  3087.       UG = 0
  3088. 25170 REFRESH = 2
  3089.       RETURN
  3090. '
  3091. ' * ESTABLISH IF THE SYSOP WANTS TO USE DOS SUB-DIRECTORIES
  3092. '
  3093. 25380 CALL GETNUMYN ("Will you be using DOS sub-directories?",WILL.SUBDIRS.B.USED)
  3094.       IF WILL.SUBDIRS.B.USED THEN _
  3095.          RETURN
  3096.       UPLOAD.TO.SUBDIR = FALES
  3097.       DOWNLOAD.TO.SUBDIR = FALSE
  3098.       RETURN
  3099. 25420 CALL GETNUMYN ("Are uploads to a DOS sub-directory?",UPLOAD.TO.SUBDIR)
  3100.       RETURN
  3101. 25460 CALL GETNUMYN ("Are downloads from DOS sub-directories?",DOWNLOAD.TO.SUBDIR)
  3102.       RETURN
  3103. '
  3104. ' * HANDLE SUB-DIRECTORY INPUTS (LIST, CHANGE, ADD, DELETE) AND PUT IN .DEF
  3105. '
  3106. 25495 IF NOT UPLOAD.TO.SUBDIR THEN _
  3107.          GOTO 25497
  3108.       A$ = "upload"
  3109.       CALL GETNUMYN ("Change upload DOS sub-directory?",AB)
  3110.       IF AB THEN _
  3111.          GOTO 25500
  3112. 25497 IF NOT DOWNLOAD.TO.SUBDIR THEN _
  3113.          RETURN
  3114.       A$ = "download"
  3115.       CALL GETNUMYN ("Modify download DOS sub-directories?",AB)
  3116.       IF AB THEN _
  3117.          GOTO 25505
  3118. 25498 RETURN
  3119. 25500 IF UPLOAD.SUBDIR$ = "" THEN _
  3120.          GOTO 25502
  3121. 25501 LOCATE 23,5
  3122.       PRINT SPC(74)
  3123.       LOCATE 23,5
  3124.       PRINT "Current " + A$ + " DOS sub-directory name is " + UPLOAD.SUBDIR$;
  3125. 25502 GOSUB 25850
  3126.       IF LEN(HJ$) < 1 THEN _
  3127.          GOTO 25505
  3128.       IF DRIVE.FOR.UPLOADS$ = MID$(X$,1,1) THEN _
  3129.          SWAP UPLOAD.SUBDIR$,X$ : _
  3130.          IF X$ = "" THEN _
  3131.             GOTO 25501 _
  3132.          ELSE 25505
  3133.       GOTO 25502
  3134. 25505 IF A$="upload" THEN _
  3135.          GOTO 25497
  3136.       IF NOT DOWNLOAD.TO.SUBDIR THEN _
  3137.          RETURN
  3138.       LOCATE 23,5
  3139.       PRINT SPC(74)
  3140.       LOCATE 23,5
  3141.       PRINT STR$(DNLD.SUB) + " of 99 download subdirectories designated.";
  3142. 25510 CALL ASKRO ("L>ist, C>hange, A>dd, D>elete " + A$ +" DOS sub-directories? (CR ends) ",24,HJ$)
  3143.       CALL ALLCAPS (HJ$)
  3144.       IF LEN(HJ$) < 1 THEN _
  3145.          GOTO 25498
  3146.       IF LEN(HJ$) <> 1 THEN _
  3147.          GOTO 25505
  3148.       FF = INSTR("LCAD",HJ$)
  3149.       IF FF = 0 THEN _
  3150.          GOTO 25510
  3151.       IF DNLD.SUB = 0 AND FF <> 3 THEN _
  3152.          GOTO 25510
  3153.       ON FF GOSUB 25610,25670,25730,25670
  3154.       GOTO 25505
  3155. 25610 LAST = (DNLD.SUB/16) + 1
  3156.       INCR = 1
  3157.       FOR IX = 1 TO LAST
  3158.          GOSUB 24800
  3159.          LOCATE 4,1
  3160.          PRINT "DOS sub-directories from which downloads are done:";
  3161.          INDEX = 4
  3162.          FOR I = 1 TO 16
  3163.             LOCATE INDEX + I,1
  3164.             PRINT DNLD$(INCR);
  3165.             INCR = INCR + 1
  3166.             IF INCR > DNLD.SUB THEN _
  3167.                GOTO 25668
  3168.          NEXT
  3169. 25636    CALL GETNUMYN ("More",AB)
  3170.          IF NOT AB THEN _
  3171.             GOTO 25668
  3172. 25644 NEXT
  3173. 25668 RETURN
  3174. 25670 GOSUB 25850
  3175.       IF LEN(HJ$) < 1 THEN _
  3176.          RETURN
  3177.       GOSUB 26030
  3178.       A$ = " not found!"
  3179.       IF X$ = "" THEN _
  3180.          GOTO 25682
  3181.       FOR I = 1 TO DNLD.SUB
  3182.          IF X$ = DNLD$(I) THEN _
  3183.             GOTO 25698
  3184.       NEXT
  3185. 25682 CALL ASKRO (X$ + A$ + " (CR to continue)",24,HJ$)
  3186.       A$ = "download"
  3187.       RETURN
  3188. 25698 IF FF = 4 THEN _
  3189.          FOR X = I TO DNLD.SUB : _
  3190.             DNLD$(X) = DNLD$(X + 1) : _
  3191.          NEXT : _
  3192.          A$ = " deleted!" : _
  3193.          DNLD.SUB = DNLD.SUB - 1 : _
  3194.          GOTO 25682
  3195.       IF FF = 2 THEN _
  3196.          A$ = "download" : _
  3197.          NEXT.MESSAGE.RECORD = I : _
  3198.          GOSUB 25850 : _
  3199.          GOSUB 26030 : _
  3200.          SWAP DNLD$(NEXT.MESSAGE.RECORD),X$ : _
  3201.          A$ = " changed!" : _
  3202.          GOTO 25682
  3203. 25730 X$ = ""
  3204.       GOSUB 25850
  3205.       IF LEN(HJ$) < 1 THEN _
  3206.          RETURN
  3207.       FOR I = 1 TO LEN(DRIVES.FOR.DOWNLOADS$)
  3208.          IF MID$(DRIVES.FOR.DOWNLOADS$,I,1) = LEFT$(X$,1) THEN _
  3209.             GOTO 25735
  3210.       NEXT
  3211.       GOSUB 60380
  3212.       CALL ASKRO (X$ + " is not a drive eligible for downloading. (CR to continue)",24,HJ$)
  3213.       GOTO 25730
  3214. 25735 IF X$ = "" THEN _
  3215.          GOTO 25498
  3216.       DNLD.SUB = DNLD.SUB + 1
  3217.       DNLD$(DNLD.SUB) = X$
  3218.       RETURN
  3219. '
  3220. ' * HANDLE SUB-DIRECTORY NAMES AND CHECK FOR THEIR VALIDITY
  3221. '
  3222. 25850 CALL ASKRO ("Enter " + A$ + " DOS sub-directory name (CR to end). ",24,HJ$)
  3223.       CALL ALLCAPS (HJ$)
  3224.       IF LEN(HJ$) < 1 THEN _
  3225.          RETURN
  3226.       IF LEN(HJ$) = 2 AND INSTR(HJ$,":") = 2 THEN _
  3227.          X$ = HJ$ : _
  3228.          RETURN
  3229.       IF INSTR(HJ$,":\") <> 2 THEN _
  3230.          GOTO 25850
  3231.       X$ = HJ$
  3232.       FOR I = 4 TO LEN(X$)
  3233.          Y = INSTR(I,X$,"\")
  3234.          IF Y = 0 THEN _
  3235.             L1 = LEN(X$) - I + 1 : _
  3236.             GOTO 25876
  3237.          IF Y <> 0 THEN _
  3238.             L1 = Y - I + 1 : _
  3239.             GOTO 25876
  3240.       NEXT
  3241. 25876 HJ$ = MID$(X$,I,L1)
  3242.       IF LEN(HJ$) > 12 THEN _
  3243.          GOTO 25850
  3244.       L1 = INSTR(HJ$,".")
  3245.       IF L1 = 0 THEN _
  3246.          IF LEN(HJ$) < 9 THEN _
  3247.             GOTO 25920 _
  3248.          ELSE GOTO 25850
  3249.       IF L1 > 9 THEN _
  3250.          GOTO 25850
  3251.       IF L1 < 2 THEN _
  3252.          GOTO 25850
  3253.       IF LEN(HJ$) - L1 > 3 THEN _
  3254.          GOTO 25850
  3255.       I = 0
  3256.       GOSUB 25920
  3257.       IF I = 0 THEN _
  3258.          RETURN
  3259.       GOTO 25850
  3260. 25920 FOR J = 1 TO LEN(HJ$)
  3261.          X = ASC(MID$(HJ$,J,1))
  3262.          IF (X > 63 AND X < 91) THEN _
  3263.             GOTO 26020
  3264.          IF (X > 47 AND X < 58) THEN _
  3265.             GOTO 26020
  3266.          IF (X = 33) THEN _
  3267.             GOTO 26020
  3268.          IF (X > 34 AND X < 42) THEN _
  3269.             GOTO 26020
  3270.          IF (X > 43 AND X < 47) THEN _
  3271.             GOTO 26020
  3272.          IF (X > 96 AND X < 124) THEN _
  3273.             GOTO 26020
  3274.          IF (X = 125) THEN _
  3275.             GOTO 26020
  3276.          I = 1
  3277.          RETURN
  3278. 26020 NEXT
  3279.       RETURN
  3280. '
  3281. ' * VERIFY THAT THE DISK DRIVE IS ONE ELIGIBLE FOR DOWNLOADING
  3282. '
  3283. 26030 FOR I = 1 TO LEN(DRIVES.FOR.DOWNLOADS$)
  3284.          IF MID$(DRIVES.FOR.DOWNLOADS$,I,1) = MID$(X$,1,1) THEN _
  3285.             RETURN
  3286.       NEXT
  3287.       X$ = ""
  3288.       RETURN
  3289. '
  3290. ' * ALLOW THE SYSOP TO SELECT THE TIME OF DAY THAT RBBS-PC IS TO DROP TO DOS
  3291. '
  3292. 26040 CALL GETNUMYN ("Is RBBS-PC to drop to DOS at a specific time each day?",AB)
  3293.       TIME.TO.DROP.TO.DOS = 0
  3294.       IF AB THEN _
  3295.          GOTO 26060
  3296. 26050 GOTO 26065
  3297. 26060 CALL GETINIT ("Time of day (HHMM) to drop to DOS--0000 to 2359? (ENTER = No)",24,0,2359,TIME.TO.DROP.TO.DOS,CR)
  3298. 26065 RETURN
  3299. '
  3300. ' * IDENTIFY THE NET WORK MAIL TYPE THAT RBBS-PC IS RUNNING IN
  3301. '
  3302. 26070 CLS
  3303.       LOCATE 3,5
  3304.       PRINT "RBBS-PC supports the following store-and-forward mail systems:"
  3305.       LOCATE 5,20
  3306.       PRINT "Environment"
  3307.       LOCATE 7,10
  3308.       PRINT "0. None"
  3309.       LOCATE 9,10
  3310.       PRINT "1. SeaDog"
  3311.       LOCATE 11,10
  3312.       PRINT "2. Binkley Term"
  3313.       LOCATE 13,10
  3314.       PRINT "3. X.400 (to be supported in the future)"
  3315.       LOCATE 15,10
  3316.       PRINT "4. GTE's PC-Pursuit (to be supported in the future)"
  3317.       LOCATE 17,10
  3318.       PRINT "5. G.E.'s GENIE's QuikComm (to be supported in the future)"
  3319. 26080 CALL GETINIT ("Select network mail type (0 to 5, CR to end)",24,0,5,AB,CR)
  3320.       NET.MAIL$ = NONE.PICKED$                                       ' KG080301
  3321.       IF AB = 1 THEN _
  3322.          NET.MAIL$ = "SeaDog"
  3323.       IF AB = 2 THEN _
  3324.          NET.MAIL$ = "BINKLEY TERM"
  3325.       RETURN
  3326. 26100 CALL GETASCII ("Turn Echo On",HOST.ECHO.ON$)
  3327.       RETURN
  3328. 26105 CALL GETASCII ("Line Acknowledge",DEFAULT.LINE.ACK$)
  3329.       RETURN
  3330. 26110 CALL GETASCII ("Turn Echo Off",HOST.ECHO.OFF$)
  3331.       RETURN
  3332. 26115 CALL GETASCII ("Turn Graphic Emphasis ON",EMPHASIZE.ON.DEF$)
  3333.       RETURN
  3334. 26120 CALL GETASCII ("Turn Graphic Emphasis OFF",EMPHASIZE.OFF.DEF$)
  3335.       RETURN
  3336. '
  3337. ' * CHECK TO SEE IF A FILE EXIST (COMMON SUBROUTINE)
  3338. '
  3339. 30000 CALL FINDFILE (FILE$,OKAY) ' <---- check to see if file exists
  3340. 30030 RETURN
  3341. '
  3342. ' * COMMON SUBROUTINE TO READ THE MESSAGES FILE'S CHECKPOINT RECORD
  3343. '
  3344. 30040 FILNUM = 2
  3345.       GOSUB 30050
  3346.       FIELD 2,128 AS RR$
  3347.       GET 2,1
  3348.       CALLS.TODATE! = VAL(MID$(RR$,1,8))             '  1-  8 = number of last message on system
  3349.       AUTO.ADD.SECURITY = CVI(MID$(RR$,9,2))         '  9- 10 = min. security to auto. add a user
  3350.       CURRENT.USER.COUNT = VAL(MID$(RR$,57,5))       ' 57- 61 = next avail. user record
  3351.       FIRST.MESSAGE.RECORD = VAL(MID$(RR$,68,7))     ' 68- 74 = first rec. of msgs file
  3352.       IF FIRST.MESSAGE.RECORD < 3 THEN _
  3353.          FIRST.MESSAGE.RECORD = 3
  3354.       NEXT.MESSAGE.RECORD = VAL(MID$(RR$,75,7))      ' 75- 81 = next avail. msgs record
  3355.       HIGHEST.MESSAGE.RECORD = VAL(MID$(RR$,82,7))   ' 82- 88 = last rec. of msgs file
  3356.       MAXIMUM.NUMBER.OF.MSGS = VAL(MID$(RR$,89,7))   ' 89- 95 = maximum number of messages
  3357.       MAXIMUM.NUMBER.OF.NODES = VAL(MID$(RR$,127,2)) '127-128 = maximum number of "nodes"
  3358.       IF MAXIMUM.NUMBER.OF.NODES < 1 THEN _
  3359.          MAXIMUM.NUMBER.OF.NODES = 1
  3360.       CLOSE 2
  3361.       FIRST.USER.RECORD = 1
  3362.       IF MAIN.MESSAGE.FILE$ = MAINMSG$ THEN _
  3363.          AUTO.ADD.SECURITY$ = "CONF. ONLY" _
  3364.       ELSE AUTO.ADD.SECURITY$ = MID$(STR$(AUTO.ADD.SECURITY),2)
  3365.       RETURN
  3366. ' * OPEN MESSAGE FILE
  3367. 30050 CLOSE FILNUM
  3368.       IF NETWORK.TYPE = 6 THEN _
  3369.          OPEN MAIN.MESSAGE.FILE$ FOR RANDOM SHARED AS #FILNUM LEN = 128 _
  3370.       ELSE OPEN "R",FILNUM,MAIN.MESSAGE.FILE$,128
  3371.       RETURN
  3372. ' * OPEN USER FILE
  3373. 30060 CLOSE 1
  3374.       IF NETWORK.TYPE = 6 THEN _
  3375.          OPEN MAIN.USER.FILE$ FOR RANDOM SHARED AS #1 LEN = 128 _
  3376.       ELSE OPEN "R",1,MAIN.USER.FILE$,128
  3377.       RETURN
  3378. '
  3379. ' * COMMON ROUTINE TO UPDATE AUTO ADD SECURITY TO CONFERENCE FILE
  3380. '
  3381. 30100 FILNUM = 1
  3382.       GOSUB 30050
  3383.       FIELD 1,8 AS MR1$, 2 AS MR2$, 118 AS MR3$
  3384.       GET 1,1
  3385.       LSET MR2$ = MKI$(AUTO.ADD.SECURITY)
  3386.       PUT 1,1
  3387.       CLOSE 1
  3388.       RETURN
  3389. '
  3390. ' * COMMON SUBROUTINE TO UPDATE MESSAGES FILE'S CHECKPOINT RECORD
  3391. '
  3392. 30450 FILNUM = 2
  3393.       GOSUB 30050
  3394.       FIELD 2,128 AS RR$
  3395.       GET 2,1
  3396.       MID$(RR$,9,2)   = MKI$(AUTO.ADD.SECURITY)      '  9- 10 = min. security to auto. add a user
  3397.       MID$(RR$,57,5)  = LEFT$(STR$(CURRENT.USER.COUNT)  +SPACE$(5),5) ' 57- 61 = next avail. user record
  3398.       MID$(RR$,68,7)  = LEFT$(STR$(FIRST.MESSAGE.RECORD)+SPACE$(7),7) ' 68- 74 = first rec. of msgs file
  3399.       MID$(RR$,75,7)  = LEFT$(STR$(NEXT.MESSAGE.RECORD) +SPACE$(7),7) ' 75- 81 = next avail. msgs record
  3400.       MID$(RR$,82,7)  = LEFT$(STR$(HIGHEST.MESSAGE.RECORD)+SPACE$(7),7) ' 82- 88 = last rec. of msgs file
  3401.       MID$(RR$,89,7)  = LEFT$(STR$(MAXIMUM.NUMBER.OF.MSGS)+SPACE$(7),7) ' 89- 95 = maximum number of messages
  3402.       HJ$ = STR$(MAXIMUM.NUMBER.OF.NODES)
  3403.       IF MAXIMUM.NUMBER.OF.NODES>9 THEN _
  3404.          HJ$ = MID$(STR$(MAXIMUM.NUMBER.OF.NODES),2,2)
  3405.       MID$(RR$,127,2) = HJ$                          '127-128 = maximum number of "nodes"
  3406.       PUT 2,1
  3407.       CLOSE 2
  3408.       RETURN
  3409. '
  3410. ' * COMMON ROUTINE TO EXPAND/CONTRACT A MESSAGES FILE
  3411. '
  3412. 30610 A$ = MAIN.MESSAGE.FILE$
  3413.       IF NO.OLD.FILE THEN _
  3414.          GOTO 30612
  3415.       FILNUM = 1
  3416.       GOSUB 30050
  3417.       FIELD 1,128 AS MESSAGE.RECORD$
  3418.       GOSUB 50095
  3419. 30612 CLOSE 2
  3420.       IF NETWORK.TYPE = 6 THEN _
  3421.          OPEN A$ FOR RANDOM SHARED AS #2 LEN = 128 _
  3422.       ELSE OPEN "R",2,A$,128
  3423.       FIELD 2,128 AS RR$
  3424.       A$="Copying"
  3425.       IF NO.OLD.FILE THEN _
  3426.          A$ = "Creating preformatted"
  3427.       OE = B1
  3428.       IF MAXIMUM.NUMBER.OF.NODES <= B1 THEN _
  3429.          OE = MAXIMUM.NUMBER.OF.NODES
  3430.       FOR J=1 TO OE + 1                 ' WRITE CHECKPOINT AND NODE RECORDS
  3431.          IF NO.OLD.FILE AND J = 1 THEN _
  3432.             GOSUB 31040
  3433.          IF NO.OLD.FILE AND J <> 1 THEN _
  3434.             GOSUB 31050
  3435.          IF NO.OLD.FILE = FALSE THEN _
  3436.             GET 1,J : _
  3437.             LSET RR$ = MESSAGE.RECORD$
  3438.          PUT 2
  3439.          GOSUB 25030
  3440.       NEXT
  3441.       IF NO.OLD.FILE THEN _
  3442.          GOTO 30850
  3443.       IF B1 <= MAXIMUM.NUMBER.OF.NODES THEN _
  3444.          GOTO 30780
  3445.       FOR J = OE + 1 TO B1             ' WRITE OUT EXPANISON NODE RECORDS
  3446.          GOSUB 31050
  3447.          PUT 2
  3448.          GOSUB 25030
  3449.       NEXT
  3450. 30780 MAXIMUM.NUMBER.OF.NODES = B1     ' SET VALUE FOR MAXIMUM NUMBER OF NODES
  3451.       JX = FIRST.MESSAGE.RECORD
  3452.       GET 1,JX
  3453.       WHILE VAL(MID$(MESSAGE.RECORD$,2,4)) = 0 AND (JX < NEXT.MESSAGE.RECORD)
  3454.          JX = JX + 1
  3455.          GET 1, JX
  3456.       WEND
  3457.       IF JX > FIRST.MESSAGE.RECORD THEN _
  3458.          PRINT (JX-FIRST.MESSAGE.RECORD);" bad records purged"
  3459.       FOR J = JX TO NEXT.MESSAGE.RECORD - 1
  3460. 30830    GET 1,J
  3461.          IF PURGE <> -1 THEN _
  3462.             GOTO 30840
  3463.          IF MID$(MESSAGE.RECORD$,116,1) = CHR$(225) THEN _
  3464.             IF VAL(MID$(MESSAGE.RECORD$,2,4)) < 1 THEN _
  3465.                PRINT " bad header purged..." : _
  3466.                GOTO 30842 _
  3467.             ELSE PRINT "Msg #" + LEFT$(MESSAGE.RECORD$,5) + " copied..." : _
  3468.                  GOTO 30840
  3469.          IF MID$(MESSAGE.RECORD$,116,1) = CHR$(226) THEN _
  3470.             PRINT "Msg #" + LEFT$(MESSAGE.RECORD$,5) + "          purged..." : _
  3471.             J = LOC(1) + VAL(MID$(MESSAGE.RECORD$,117,4)) : _
  3472.             GOTO 30830
  3473. 30840    LSET RR$ = MESSAGE.RECORD$
  3474.          PUT 2                    ' WRITE OUT MESSAGE RECORD
  3475.          GOSUB 25030
  3476. 30842 NEXT
  3477.       B1 = LOC(2) + 1             ' GET NEW FILE'S NEXT MESSAGE RECORD
  3478.       CLOSE 1
  3479.       IF B3! < LOC(2) + 1 THEN _
  3480.          GOTO 30960
  3481. 30850 IF NO.OLD.FILE OR PURGE THEN _
  3482.          NEXT.MESSAGE.RECORD = LOC(2) + 1 : _
  3483.          PURGE = 0 : _
  3484.          A$ = "Preformatting"
  3485.       IF MESSAGES.CAN.GROW THEN _
  3486.          GOTO 30960
  3487.       GOSUB 25030
  3488.       FOR J! = NEXT.MESSAGE.RECORD TO B3!
  3489.          LSET RR$ = SPACE$(128)
  3490.          PUT 2                    ' WRITE OUT EXPANSION MESSAGE RECORDS
  3491.          LOCATE 24,X
  3492.          PRINT STR$(LOC(2)) + SPACE$(10);
  3493.       NEXT
  3494. 30960 FIRST.MESSAGE.RECORD = 1 + MAXIMUM.NUMBER.OF.NODES + 1
  3495.       NEXT.MESSAGE.RECORD = B1
  3496.       IF NEXT.MESSAGE.RECORD < FIRST.MESSAGE.RECORD THEN _
  3497.          NEXT.MESSAGE.RECORD = FIRST.MESSAGE.RECORD
  3498.       HIGHEST.MESSAGE.RECORD = LOC(2)
  3499.       CLOSE 2
  3500. 30980 IF NO.OLD.FILE THEN _
  3501.          RETURN
  3502.       CALL GETNUMYN ("Delete the old " + _
  3503.                       MAIN.MESSAGE.FILE$ + _
  3504.                      " file?",AB)
  3505.       IF AB THEN _
  3506.          GOTO 31020
  3507. 31000 A$ = MAIN.MESSAGE.FILE$
  3508.       GOSUB 50096
  3509.       NAME MAIN.MESSAGE.FILE$ AS A$
  3510.       GOTO 31030
  3511. 31020 KILL MAIN.MESSAGE.FILE$
  3512. 31030 A$ = MAIN.MESSAGE.FILE$
  3513.       GOSUB 50095
  3514.       NAME A$ AS MAIN.MESSAGE.FILE$
  3515.       GOSUB 30450
  3516. 31035 RETURN
  3517. '
  3518. ' * COMMON SUBROUTINE TO CREATE A BLANK "CHECKPOINT" RECORD IN THE MESSAGE FILE
  3519. '
  3520. 31040 LSET RR$ = " 0      " + _               ' NUMBER OF LAST MESSAGE  ' DA061001
  3521.                  MKI$(0) + _                  ' SECURITY LEVEL TO AUTO-ADD USER
  3522.                  SPACE$(116) + _              ' BLANKS IN ALL OTHER FIELDS
  3523.                  RIGHT$("0"+MID$(STR$(MAXIMUM.NUMBER.OF.NODES),2),2)
  3524.       RETURN
  3525. '
  3526. ' * COMMON SUBROUTINE TO CREATE A BLANK "NODE" RECORD IN THE MESSAGE FILE
  3527. '
  3528. 31050 LSET RR$ = SPACE$(31) + "-1 0 0 0 0 0 0 0    0 0 0I"
  3529.       RETURN
  3530. '
  3531. ' * COMMON SUBROUTINE TO MAKE SURE A WORK FILE HAS ".BAK" AS AN EXTENSION
  3532. '
  3533. 50095 IF INSTR(A$,".") THEN _
  3534.          A$ = MID$(A$,1,INSTR(A$,".") - 1) + _
  3535.               ".BAK" : _
  3536.          RETURN _
  3537.       ELSE A$ = A$ + _
  3538.                 ".BAK" : _
  3539.       RETURN
  3540. '
  3541. ' * COMMON SUBROUTINE TO MAKE SURE SAVED FILES HAVES ".OLD" AS AN EXTENSION
  3542. '
  3543. 50096 IF INSTR(A$,".") THEN _
  3544.          A$ = MID$(A$,1,INSTR(A$,".") - 1) + _
  3545.               ".OLD" : _
  3546.          RETURN _
  3547.       ELSE A$ = A$ + _
  3548.                 ".OLD" : _
  3549.       RETURN
  3550. '
  3551. ' * COMMON SUBROUTINE TO DISPLAY A MESSAGE ON LINE 24
  3552. '
  3553. 50345 I! = FRE(C$)
  3554. 50346 LOCATE 24,1
  3555.       PRINT SPACE$(5)+XX$+SPACE$(74-LEN(XX$));
  3556.       X = 5 + LEN(XX$) + 1
  3557.       RETURN
  3558. 50350 F$ = MAIN.USER.FILE$
  3559.       IF INSTR(MAIN.USER.FILE$,".") THEN _
  3560.          F$ = MID$(MAIN.USER.FILE$,1,INSTR(MAIN.USER.FILE$,".") - 1)
  3561.       RETURN
  3562. '
  3563. ' * COMMON SUBROUTINE TO GET LENGTH OF THE USERS FILE
  3564. '
  3565. 50480 MAX.USR.FILE.SIZE.FRM.DEF = 8
  3566.       HIGHEST.USER.RECORD = MAX.USR.FILE.SIZE.FRM.DEF
  3567. 50490 NAME MAIN.USER.FILE$ AS MAIN.USER.FILE$
  3568. 50500 GOSUB 30060
  3569.       UG = LOF(1) / 128.0!
  3570.       MAX.USR.FILE.SIZE.FRM.DEF = UG
  3571.       HIGHEST.USER.RECORD = UG
  3572.       GOTO 50560
  3573. '
  3574. ' * COMMON SUBROUTINE TO GET LENGTH OF THE MESSAGES FILE
  3575. '
  3576. 50530 MAX.MSG.FILE.SIZE.FRM.DEF! = (5 * MAX.ALLOWED.MSGS.FRM.DEF) + 1 + MAXIMUM.NUMBER.OF.NODES
  3577. 50540 NAME MAIN.MESSAGE.FILE$ AS MAIN.MESSAGE.FILE$
  3578. 50550 FILNUM = 1
  3579.       GOSUB 30050
  3580.       IF MAX.MSG.FILE.SIZE.FRM.DEF!<LOF(1) / 128 THEN _
  3581.          MAX.MSG.FILE.SIZE.FRM.DEF! = LOF(1) / 128
  3582. 50560 GOSUB 22340
  3583.       CLOSE 1
  3584.       RETURN
  3585. '
  3586. ' * COMMON SUBROUTINE TO REPAIR THE MESSAGE FILE AND GUARANTEE IT'S CHAINS
  3587. '
  3588. 50580 OLD = LOC(1)
  3589.       GET 1,I + 1
  3590.       IF (MID$(MESSAGE.RECORD$,116,1) = CHR$(225) _
  3591.          OR  MID$(MESSAGE.RECORD$,116,1) = CHR$(226)) _
  3592.          AND (MID$(MESSAGE.RECORD$,61,1) = ":" _
  3593.          AND  MID$(MESSAGE.RECORD$,64,1) = ":" _
  3594.          AND  MID$(MESSAGE.RECORD$,70,1) = "-" _
  3595.          AND MID$(MESSAGE.RECORD$,73,1) = "-") THEN _
  3596.          RETURN
  3597.       PRINT "Message chain broken at record number " + STR$(OLD)
  3598.       PRINT "Message chain repair in progress!
  3599.       FOR IQ = OLD + 1 TO NEXT.MESSAGE.RECORD - 1
  3600.          GET 1,IQ
  3601.          IF (MID$(MESSAGE.RECORD$,116,1) = CHR$(225) _
  3602.             OR MID$(MESSAGE.RECORD$,116,1) = CHR$(226)) _
  3603.             AND (MID$(MESSAGE.RECORD$,61,1)  = ":" _
  3604.             AND  MID$(MESSAGE.RECORD$,64,1)  = ":" _
  3605.             AND  MID$(MESSAGE.RECORD$,70,1) = "-" _
  3606.             AND  MID$(MESSAGE.RECORD$,73,1) = "-") THEN _
  3607.             GET 1,OLD : _
  3608.             MID$(MESSAGE.RECORD$,117,4) = STR$(IQ - OLD) : _
  3609.             PUT 1,OLD : _
  3610.             PRINT "Message chain repaired." : _
  3611.             I = IQ : _
  3612.             RETURN
  3613.       NEXT
  3614.       RETURN 23730
  3615. '
  3616. ' * COMMON SUBROUTINE TO HASH A USER'S NAME TO FIND THE CORRECT USER RECORD #
  3617. '
  3618. 50720 JX = LEN.HASH
  3619.       WHILE MID$(HASH.VALUE$,JX,1) = " "
  3620.         JX = JX - 1
  3621.       WEND
  3622.       X$ = MID$(HASH.VALUE$,1,JX)
  3623.       UIX# = FNHSH(X$)
  3624.       Q = FNHSH2(X$)
  3625.       NSR = 1
  3626.       RO = CSRLIN
  3627.       CO = POS(0)
  3628. 50722 GET 2,UIX#
  3629.       HASH.VALUE.N$ = MID$(USER.RECORD.N$,START.HASH,LEN.HASH)
  3630.       IF MID$(HASH.VALUE.N$,1,NU) = EMPTY.USER$ THEN _
  3631.          GOTO 50730
  3632.       IF HASH.VALUE$ <> HASH.VALUE.N$ THEN _
  3633.          GOTO 50725
  3634.       IF START.INDIV > 0 AND LEN.INDIV > 0 THEN _
  3635.          IF MID$(USER.RECORD$,START.INDIV,LEN.INDIV) <> MID$(USER.RECORD.N$,START.INDIV,LEN.INDIV) THEN _
  3636.             GOTO 50725
  3637.       LOCATE RO,CO
  3638.       PRINT "Omitted Duplicate ";
  3639.       PURGED.COUNT = PURGED.COUNT + 1
  3640.       RETURN
  3641. 50725 UIX# = UIX# + Q
  3642.       IF UIX# > MAX.USR.FILE.SIZE.FRM.DEF THEN _
  3643.          UIX# = UIX# - MAX.USR.FILE.SIZE.FRM.DEF
  3644.       NSR = NSR + 1
  3645.       LOCATE RO,CO
  3646.       PRINT "searching";UIX#;
  3647.       GOTO 50722
  3648. 50730 LSET USER.RECORD.N$ = USER.RECORD$
  3649.       PUT 2,UIX#
  3650.       CURRENT.USER.COUNT = CURRENT.USER.COUNT + 1
  3651.       LOCATE RO,CO
  3652.       PRINT " pos#";UIX#;"/";NSR;"srch(s) ";
  3653.       RETURN
  3654. '
  3655. ' * COMMON SUBROUTINE TO WRITE OUT BLANK USER RECORDS TO THE USERS FILE
  3656. '
  3657. 50840 TEMPLATE$ = SPACE$(46) + MKI$(-32000)
  3658.       GOSUB 25020
  3659.       FOR J = A! + 1 TO MAX.USR.FILE.SIZE.FRM.DEF
  3660.          LSET USER.RECORD.N$ = TEMPLATE$
  3661.          PUT 2
  3662.          LOCATE 24,X
  3663.          PRINT J;
  3664.       NEXT
  3665.       PRINT
  3666.       RETURN
  3667. '
  3668. ' * CONVERT DISPLAYABLE OPTIONS INTO RBBS-PC.DEF PARAMETER VARIABLES
  3669. '
  3670. 59000 GOSUB 30100
  3671.       IF EXPERT.USER$ = "NOVICE" THEN _
  3672.          EXPERT.USER = 0
  3673.       IF EXPERT.USER$ = "EXPERT" THEN _
  3674.          EXPERT.USER = -1
  3675.       DOWNLOAD.DRIVES$ = DRIVES.FOR.DOWNLOADS$ + DRIVE.FOR.UPLOADS$
  3676.       PROMPT.BELL = -1
  3677.       IF PROMPT.BELL$ = "OFF" THEN _
  3678.          PROMPT.BELL = 0
  3679.       PAGING.PRINTER.SUPPORT$ = ". "
  3680.       IF M11$ = "YES" THEN _
  3681.          PAGING.PRINTER.SUPPORT$ = ". " + _
  3682.                                    CHR$(7)
  3683.       GOSUB 15780
  3684.       IF MAIN.MESSAGE.FILE$ <> MAINMSG$ THEN _
  3685.          MAIN.MESSAGE.FILE$ = MAINMSG$
  3686.       IF MAIN.USER.FILE$ <> MAINUSR$ THEN _
  3687.          MAIN.USER.FILE$ = MAINUSR$
  3688.       IF CONFERENCE.MODE THEN _
  3689.          GOSUB 30040
  3690.       IF CALLERS.FILE$ = NONE.PICKED$ THEN _
  3691.          CALLERS.FILE$ = ""
  3692.       IF ALTDIR.EXTENSION$ = NONE.PICKED$ THEN _
  3693.          ALTDIR.EXTENSION$ = ""
  3694.       IF ALWAYS.STREW.TO$ = NONE.PICKED$ THEN _
  3695.          ALWAYS.STREW.TO$ = ""
  3696.       IF QUES.PATH$ = NONE.PICKED$ THEN _
  3697.          QUES.PATH$ = ""
  3698.       IF NEW.USER.QUESTIONNAIRE$ = NONE.PICKED$ THEN _
  3699.          NEW.USER.QUESTIONNAIRE$ = ""
  3700.       IF REQUIRED.QUESTIONNAIRE$ = NONE.PICKED$ THEN _
  3701.          REQUIRED.QUESTIONNAIRE$ = ""
  3702.       IF NET.MAIL$ = NONE.PICKED$ THEN _
  3703.          NET.MAIL$ = "NONE"
  3704.       IF CONFMAIL.LIST$ = NONE.PICKED$ THEN _
  3705.          CONFMAIL.LIST$ = ""
  3706.       IF REGISTRATION.PROGRAM$ = NONE.PICKED$ THEN _
  3707.          REGISTRATION.PROGRAM$ = ""
  3708. 59020 OPEN "O",#1,CONFIG.FILENAME$
  3709.       IF INSTR(MO$,":") < 1 THEN _
  3710.          MO$ = MO$ + _
  3711.                ":"
  3712.       IF INSTR(SJ$,":") < 1 THEN _
  3713.          SJ$ = SJ$ + _
  3714.                ":"
  3715.       IF INSTR(DRIVE.FOR.BULLETINS$,":") < 1 THEN _
  3716.          DRIVE.FOR.BULLETINS$ = DRIVE.FOR.BULLETINS$ + _
  3717.                                 ":"
  3718.       T$ = DIRECTORY.EXTENTION$
  3719.       IF INSTR(DIRECTORY.EXTENTION$,".") THEN _
  3720.          T$ = MID$(DIRECTORY.EXTENTION$,INSTR(DIRECTORY.EXTENTION$,".") + 1,LEN(DIRECTORY.EXTENTION$))
  3721.       S$ = UPLOAD.DIRECTORY$
  3722.       IF INSTR(UPLOAD.DIRECTORY$,".") THEN _
  3723.          S$ = MID$(UPLOAD.DIRECTORY$,1,INSTR(UPLOAD.DIRECTORY$,".") - 1)
  3724.       DIRECTORY.EXTENTION$ = T$
  3725.       UPLOAD.DIRECTORY$ = S$
  3726.       IF NOT DOWNLOAD.TO.SUBDIR THEN _
  3727.          DNLD.SUB = 0 : _
  3728.          FOR I = 1 TO 99 : _
  3729.             DNLD$(I) = "" : _
  3730.          NEXT
  3731.       IF NOT UPLOAD.TO.SUBDIR THEN _
  3732.          UPLOAD.SUBDIR$ = DRIVE.FOR.UPLOADS$ + _
  3733.                           ":"
  3734.       IF UPLOAD.TO.SUBDIR AND UPLOAD.SUBDIR$ <> "" THEN _
  3735.          DRIVE.FOR.UPLOADS$ = UPLOAD.SUBDIR$
  3736.       IF REQUIRED.RINGS = 0 AND _
  3737.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0") + 3,5) <> "1Q0X1" THEN _
  3738.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0") + 3,5) = "1Q0X1"
  3739.       IF REQUIRED.RINGS > 0 AND _
  3740.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0") + 3,3) = "0Q0X1" THEN _
  3741.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0") + 3,3) = "254  "
  3742.       EXTENSION.LIST$ = DEFAULT.EXTENSION$
  3743.       IF COMPRESSED.EXT$ <> NONE.PICKED$ THEN _
  3744.          EXTENSION.LIST$ = EXTENSION.LIST$ + COMPRESSED.EXT$
  3745. '
  3746. ' * WRITE OUT THE "RBBS-PC.DEF" FILE WITH THE SYSOP'S SPECIFIED CONFIGURATION
  3747. '
  3748. 59030 WRITE #1,VERSION.NUMBER$, _
  3749.                DOWNLOAD.DRIVES$, _
  3750.                SYSOP.PASSWORD.1$, _
  3751.                SYSOP.PASSWORD.2$, _
  3752.                SYSOP.FIRST.NAME$, _
  3753.                SYSOP.LAST.NAME$, _
  3754.                REQUIRED.RINGS, _
  3755.                START.OFFICE.HOURS, _
  3756.                END.OFFICE.HOURS, _
  3757.                MINUTES.PER.SESSION!, _
  3758.                MAX.ALLOWED.MSGS.FRM.DEF, _
  3759.                ACT.MNTHS.B4.DELETING, _
  3760.                UPLOAD.DIRECTORY$,_
  3761.                EXPERT.USER, _
  3762.                ACTIVE.BULLETINS, _
  3763.                PROMPT.BELL, _
  3764.                PCJR, _
  3765.                MENUS.CAN.PAUSE, _
  3766.                MENU$(1), _
  3767.                MENU$(2), _
  3768.                MENU$(3), _
  3769.                MENU$(4), _
  3770.                MENU$(5), _
  3771.                MENU$(6), _
  3772.                CONFERENCE.MENU$, _
  3773.                CONFERENCE.VIEWER.SEC.LVL, _
  3774.                WELCOME.INTERRUPTABLE, _
  3775.                REMIND.FILE.TRANSFERS, _
  3776.                PAGE.LENGTH, _
  3777.                MAX.MESSAGE.LINES, _
  3778.                DOORS.AVAILABLE, _
  3779.                MO$
  3780.       IF INSTR(BULLETIN.MENU$,":") < 1 THEN _
  3781.          BULLETIN.MENU$ = DRIVE.FOR.BULLETINS$ + _
  3782.                           BULLETIN.MENU$
  3783.       IF INSTR(BULLETIN.PREFIX$,":") < 1 THEN _
  3784.          BULLETIN.PREFIX$ = DRIVE.FOR.BULLETINS$ + _
  3785.                             BULLETIN.PREFIX$
  3786.       IF GLOBAL.FUNCTION(3) > MINIMUM.LOGON.SECURITY THEN _
  3787.          GLOBAL.FUNCTION(3) = MINIMUM.LOGON.SECURITY
  3788.       IF FILES.FUNCTION(2) > MINIMUM.LOGON.SECURITY THEN _
  3789.          FILES.FUNCTION(2) = MINIMUM.LOGON.SECURITY
  3790.       IF LIBRARY.FUNCTION(4) > MINIMUM.LOGON.SECURITY THEN _
  3791.          LIBRARY.FUNCTION(4) = MINIMUM.LOGON.SECURITY
  3792.       IF LIBRARY.DRIVE$ = "" THEN _
  3793.          MAIN.FUNCTION(18) = 32767
  3794.       WRITE #1,MAIN.MESSAGE.FILE$, _
  3795.                MAIN.MESSAGE.BACKUP$, _
  3796.                CALLERS.FILE$, _
  3797.                COMMENTS.FILE$, _
  3798.                MAIN.USER.FILE$, _
  3799.                WELCOME.FILE$, _
  3800.                NEWUSER.FILE$, _
  3801.                DIRECTORY.EXTENTION$, _
  3802.                COM.PORT$, _
  3803.                BULLETINS.OPTIONAL, _
  3804.                USER.INIT.COMMAND$, _
  3805.                RTS$, _
  3806.                DOS.VERSION, _
  3807.                FG, _
  3808.                BG, _
  3809.                BORDER, _
  3810.                RBBS.BAT$, _
  3811.                RCTTY.BAT$
  3812.       WRITE #1,OMIT.MAIN.DIRECTORY$, _
  3813.                FIRST.NAME.PROMPT$, _
  3814.                HELP$(3), _
  3815.                HELP$(4), _
  3816.                HELP$(7), _
  3817.                HELP$(9), _
  3818.                BULLETIN.MENU$, _
  3819.                BULLETIN.PREFIX$, _
  3820.                DRIVE.FOR.BULLETINS$, _
  3821.                MESSAGE.REMINDER, _
  3822.                REQUIRE.NON.ASCII, _
  3823.                ASK.EXTENDED.DESC, _
  3824.                MAXIMUM.NUMBER.OF.NODES, _
  3825.                NETWORK.TYPE, _
  3826.                RECYCLE.TO.DOS, _
  3827.                MAX.USR.FILE.SIZE.FRM.DEF, _
  3828.                MAX.MSG.FILE.SIZE.FRM.DEF!, _
  3829.                TRASHCAN.FILE$
  3830.       WRITE #1,MINIMUM.LOGON.SECURITY, _
  3831.                DEFAULT.SECURITY.LEVEL, _
  3832.                SYSOP.SECURITY.LEVEL, _
  3833.                FILESEC.FILE$, _
  3834.                SYSOP.MENU.SECURITY.LEVEL, _
  3835.                CONFMAIL.LIST$, _
  3836.                MAXIMUM.VIOLATIONS, _
  3837.                SYSOP.FUNCTION(1), _
  3838.                SYSOP.FUNCTION(2), _
  3839.                SYSOP.FUNCTION(3), _
  3840.                SYSOP.FUNCTION(4), _
  3841.                SYSOP.FUNCTION(5), _
  3842.                SYSOP.FUNCTION(6), _
  3843.                SYSOP.FUNCTION(7), _
  3844.                PASSWORD.FILE$, _
  3845.                MAXIMUM.PASSWORD.CHANGES, _
  3846.                MINIMUM.SECURITY.FOR.TEMP.PASSWORD, _
  3847.                OVERWRITE.SECURITY.LEVEL, _
  3848.                DOORS.TERMINAL.TYPE, _
  3849.                MAX.PER.DAY
  3850.       WRITE #1,MAIN.FUNCTION(1), _
  3851.                MAIN.FUNCTION(2), _
  3852.                MAIN.FUNCTION(3), _
  3853.                MAIN.FUNCTION(4), _
  3854.                MAIN.FUNCTION(5), _
  3855.                MAIN.FUNCTION(6), _
  3856.                MAIN.FUNCTION(7), _
  3857.                MAIN.FUNCTION(8), _
  3858.                MAIN.FUNCTION(9), _
  3859.                MAIN.FUNCTION(10), _
  3860.                MAIN.FUNCTION(11), _
  3861.                MAIN.FUNCTION(12), _
  3862.                MAIN.FUNCTION(13), _
  3863.                MAIN.FUNCTION(14), _
  3864.                MAIN.FUNCTION(15), _
  3865.                MAIN.FUNCTION(16), _
  3866.                MAIN.FUNCTION(17), _
  3867.                MAIN.FUNCTION(18), _
  3868.                MIN.NEWCALLER.BAUD, _
  3869.                WAIT.BEFORE.DISCONNECT
  3870.       WRITE #1,FILES.FUNCTION(1), _
  3871.                FILES.FUNCTION(2), _
  3872.                FILES.FUNCTION(3), _
  3873.                FILES.FUNCTION(4), _
  3874.                FILES.FUNCTION(5), _
  3875.                FILES.FUNCTION(6), _
  3876.                FILES.FUNCTION(7), _
  3877.                FILES.FUNCTION(8), _
  3878.                UTILITY.FUNCTION(1), _
  3879.                UTILITY.FUNCTION(2), _
  3880.                UTILITY.FUNCTION(3), _
  3881.                UTILITY.FUNCTION(4), _
  3882.                UTILITY.FUNCTION(5), _
  3883.                UTILITY.FUNCTION(6), _
  3884.                UTILITY.FUNCTION(7), _
  3885.                UTILITY.FUNCTION(8), _
  3886.                UTILITY.FUNCTION(9), _
  3887.                UTILITY.FUNCTION(10), _
  3888.                UTILITY.FUNCTION(11), _
  3889.                UTILITY.FUNCTION(12), _
  3890.                GLOBAL.FUNCTION(1), _
  3891.                GLOBAL.FUNCTION(2), _
  3892.                GLOBAL.FUNCTION(3), _
  3893.                GLOBAL.FUNCTION(4), _
  3894.                UPLOAD.TIME.FACTOR!, _
  3895.                COMPUTER.TYPE, _
  3896.                REMIND.PROFILE, _
  3897.                RBBS.NAME$, _
  3898.                COMMANDS.BETWEEN.RINGS, _
  3899.                DF, _
  3900.                PAGING.PRINTER.SUPPORT$, _
  3901.                MODEM.INIT.BAUD$
  3902. 59035 WRITE #1,TURN.PRINTER.OFF,_
  3903.                DIRECTORY.PATH$,_
  3904.                MIN.SEC.TO.VIEW, _
  3905.                LIMIT.SEARCH.TO.FMS, _
  3906.                DEFAULT.CATEGORY.CODE$, _
  3907.                DIR.CATEGORY.FILE$, _
  3908.                NEW.FILES.CHECK, _
  3909.                MAX.DESC.LEN, _
  3910.                SHOW.SECTION, _
  3911.                COMMANDS.IN.PROMPT, _
  3912.                NEWUSER.SETS.DEFAULTS, _
  3913.                HELP.PATH$, _
  3914.                HELP.EXTENSION$, _
  3915.                MAIN.COMMANDS$, _
  3916.                FILE.COMMANDS$, _
  3917.                UTIL.COMMANDS$, _
  3918.                GLOBAL.COMMANDS$, _
  3919.                SYSOP.COMMANDS$
  3920.       WRITE #1,RECYCLE.WAIT, _
  3921.                LIBRARY.FUNCTION(1), _
  3922.                LIBRARY.FUNCTION(2), _
  3923.                LIBRARY.FUNCTION(3), _
  3924.                LIBRARY.FUNCTION(4), _
  3925.                LIBRARY.FUNCTION(5), _
  3926.                LIBRARY.FUNCTION(6), _
  3927.                LIBRARY.FUNCTION(7), _
  3928.                LIBRARY.DRIVE$, _
  3929.                LIBRARY.DIRECTORY.PATH$, _
  3930.                LIBRARY.DIRECTORY.EXTENTION$, _
  3931.                LIBRARY.WORK.DISK.PATH$, _
  3932.                LIBRARY.MAX.DISK, _
  3933.                LIBRARY.MAX.DIRECTORY, _
  3934.                LIBRARY.MAX.SUBDIR, _
  3935.                LIBRARY.SUBDIR.PREFIX$, _
  3936.                LIBRARY.ARCHIVE.PATH$, _
  3937.                LIBRARY.ARCHIVE.PROGRAM$, _
  3938.                LIBRARY.COMMANDS$
  3939.       WRITE #1,UPLOAD.PATH$, _
  3940.                FMS.DIRECTORY$, _
  3941.                ANS.MENU$, _
  3942.                REQUIRED.QUESTIONNAIRE$, _
  3943.                REMEMBER.NEW.USERS, _
  3944.                SURVIVE.NOUSER.ROOM, _
  3945.                PROMPT.HASH$, _
  3946.                START.HASH, _
  3947.                LEN.HASH, _
  3948.                PROMPT.INDIV$, _
  3949.                START.INDIV, _
  3950.                LEN.INDIV
  3951.       WRITE #1,BYPASS.MSGS, _
  3952.                MUSIC, _
  3953.                RESTRICT.BY.DATE, _
  3954.                DAYS.TO.WARN, _
  3955.                DAYS.IN.SUBSCRIPTION.PERIOD, _
  3956.                VOICE.TYPE, _
  3957.                RESTRICT.VALID.CMDS, _
  3958.                NEW.USER.DEFAULT.MODE, _
  3959.                NEW.USER.LINE.FEEDS, _
  3960.                NEW.USER.NULLS, _
  3961.                FAST.FILE.LIST$, _
  3962.                FAST.FILE.LOCATOR$, _
  3963.                MESSAGES.CAN.GROW, _
  3964.                WRAP.CALLERS.FILE$, _
  3965.                REDIRECT.IO.METHOD, _
  3966.                AUTO.UPGRADE.SEC, _
  3967.                HALT.ON.ERROR, _
  3968.                NEW.PUBLIC.MSGS.SECURITY, _
  3969.                NEW.PRIVATE.MSGS.SECURITY, _
  3970.                SECURITY.NEEDED.TO.CHANGE.MSGS, _
  3971.                SL.CATEGORIZE.UPLOADS, _
  3972.                BAUDOT, _
  3973.                TIME.TO.DROP.TO.DOS, _
  3974.                EXPIRED.SECURITY, _
  3975.                DTR.DROP.DELAY, _
  3976.                ASK.IDENTITY, _
  3977.                MAX.REG.SEC, _
  3978.                BUFFER.SIZE, _
  3979.                MLCOM, _
  3980.                SHOOT.YOURSELF, _
  3981.                EXTENSION.LIST$, _
  3982.                NEW.USER.DEFAULT.PROTOCOL$, _
  3983.                NEW.USER.GRAPHICS$, _
  3984.                NET.MAIL$, _
  3985.                MASTER.DIRECTORY.NAME$, _
  3986.                PROTO.DEF$, _
  3987.                UPCAT.HELP$, _
  3988.                ALWAYS.STREW.TO$, _
  3989.                LAST.NAME.PROMPT$
  3990.       MSB = LSB + 1
  3991.       LINE.CONTROL.REGISTER = LSB + 3
  3992.       MODEM.CONTROL.REGISTER = LSB + 4
  3993.       LINE.STATUS.REGISTER = LSB + 5
  3994.       MODEM.STATUS.REGISTER = LSB + 6
  3995.       WRITE #1,PERSONAL.DRVPATH$, _
  3996.                PERSONAL.DIR$, _
  3997.                PERSONAL.BEGIN, _
  3998.                PERSONAL.LEN, _
  3999.                PERSONAL.PROTOCOL$, _
  4000.                PERSONAL.CONCAT, _
  4001.                PRIVATE.READ.SEC, _
  4002.                PUBLIC.READ.SEC, _
  4003.                SEC.CHANGE.MSG, _
  4004.                KEEP.INIT.BAUD, _
  4005.                MAIN.PUI$, _
  4006.                DEFAULT.ECHOER$, _
  4007.                HOST.ECHO.ON$, _
  4008.                HOST.ECHO.OFF$, _
  4009.                SWITCH.BACK, _
  4010.                DEFAULT.LINE.ACK$, _
  4011.                ALTDIR.EXTENSION$, _
  4012.                DIRECTORY.PREFIX$
  4013.       WRITE #1,SEC.LVL.EXEMPT.FRM.PURGING, _
  4014.                MODEM.INIT.WAIT.TIME, _
  4015.                MODEM.COMMAND.DELAY.TIME, _
  4016.                TURBO.RBBS, _
  4017.                DNLD.SUB, _
  4018.                WILL.SUBDIRS.B.USED, _
  4019.                UPLOAD.TO.SUBDIR, _
  4020.                DOWNLOAD.TO.SUBDIR, _
  4021.                UPLOAD.SUBDIR$, _
  4022.                MIN.OLDCALLER.BAUD, _
  4023.                MAX.WORK.VAR, _
  4024.                DISKFULL.GO.OFFLINE, _
  4025.                EXTENDED.LOGGING, _
  4026.                USER.RESET.COMMAND$, _
  4027.                USER.COUNT.RINGS.COMMAND$, _
  4028.                USER.ANSWER.COMMAND$, _
  4029.                USER.GO.OFFHOOK.COMMAND$, _
  4030.                DISK.FOR.DOS$, _
  4031.                DUMB.MODEM, _
  4032.                COMMENTS.AS.MESSAGES, _
  4033.                LSB, _
  4034.                MSB, _
  4035.                LINE.CONTROL.REGISTER, _
  4036.                MODEM.CONTROL.REGISTER, _
  4037.                LINE.STATUS.REGISTER, _
  4038.                MODEM.STATUS.REGISTER
  4039.       ORIG.COMMANDS$ = MAIN.COMMANDS.DEFAULTS$ + _
  4040.                        FILE.COMMANDS.DEFAULTS$ + _
  4041.                        UTIL.COMMANDS.DEFAULTS$ + _
  4042.                        LIBRARY.COMMANDS.DEFAULTS$ + _
  4043.                        GLOBAL.COMMANDS.DEFAULTS$ + _
  4044.                        SYSOP.COMMANDS.DEFAULTS$
  4045.       WRITE #1,KEEP.TIME.CREDITS, _
  4046.                XON.XOFF, _
  4047.                ALLOW.CALLER.TURBO, _
  4048.                USE.DEVICE.DRIVER$, _
  4049.                PRELOG$, _
  4050.                NEW.USER.QUESTIONNAIRE$, _
  4051.                EPILOG$, _
  4052.                REGISTRATION.PROGRAM$, _
  4053.                QUES.PATH$, _
  4054.                USER.LOCATION$, _
  4055.                USER.INITIALIZE.COMMAND$, _
  4056.                USER.FIRMWARE.CLEAR.CMND$, _
  4057.                USER.FIRMWARE.WRITE.CMND$, _
  4058.                ENFORCE.UPLOAD.DOWNLOAD.RATIOS, _
  4059.                SIZE.OF.STACK, _
  4060.                SECURITY.EXEMPT.FROM.EPILOG, _
  4061.                USE.BASIC.WRITES, _
  4062.                DOSANSI, _
  4063.                ESCAPE.INSECURE, _
  4064.                USE.DIR.ORDER, _
  4065.                ADD.DIR.SECURITY, _
  4066.                MAX.EXTENDED.LINES, _
  4067.                ORIG.COMMANDS$
  4068.       IF MACRO.EXTENSION$ <> "" THEN _
  4069.          MACRO.EXTENSION$ = "." + MACRO.EXTENSION$
  4070.       CALL COLORCODE (FG.1.DEF$,FG.1.DEF$,X)
  4071.       CALL COLORCODE (FG.2.DEF$,FG.2.DEF$,X)
  4072.       CALL COLORCODE (FG.3.DEF$,FG.3.DEF$,X)
  4073.       CALL COLORCODE (FG.4.DEF$,FG.4.DEF$,X)
  4074.       WRITE #1,LOGON.MAIL.LEVEL$, _
  4075.                MACRO.DRVPATH$, _
  4076.                MACRO.EXTENSION$, _
  4077.                EMPHASIZE.ON.DEF$, _
  4078.                EMPHASIZE.OFF.DEF$, _
  4079.                FG.1.DEF$, _
  4080.                FG.2.DEF$, _
  4081.                FG.3.DEF$, _
  4082.                FG.4.DEF$, _
  4083.                SECVIO.HLP$, _
  4084.                FOSSIL, _
  4085.                MAX.CARRIER.WAIT, _
  4086.                CALLER.BKGRD, _
  4087.                SMART.TEXT, _
  4088.                TIME.LOCK, _
  4089.                WRITE.BUF.DEF, _
  4090.                SEC.KILL.ANY, _
  4091.                DOORS.DEF$, _
  4092.                SCREEN.OUT.MSG$, _
  4093.                AUTOPAGE.DEF$
  4094.       IF DNLD.SUB <1 OR DNLD.SUB > 99 THEN _
  4095.          GOTO 59080
  4096.       FOR I = 1 TO DNLD.SUB
  4097.          WRITE #1,DNLD$(I)
  4098.       NEXT
  4099. 59080 CLOSE #1
  4100. '
  4101. ' * NOTIFY THE SYSOP THAT THE CONFIGURATION DESCRIPTION FILE HAS BEEN WRITTEN
  4102. '
  4103.       CLS
  4104.       LOCATE 12,1,1
  4105.       PRINT "Saved RBBS-PC configuration description file " ; CONFIG.FILENAME$ ' KG080904
  4106.       GOTO 60340                                                     ' DA081006
  4107. '
  4108. ' *  CONFIG.BAS'S ERROR ROUTINES
  4109. '
  4110. 60010 '* HANDLE ERROR CONDITIONS *
  4111.       IF ERR = 62 AND _
  4112.         (ERL = 11600 OR _
  4113.          ERL = 11620 OR _
  4114.          ERL = 11640 OR _
  4115.          ERL = 11660 OR _
  4116.          ERL = 11680 OR _
  4117.          ERL = 11700 OR _
  4118.          ERL = 11705 OR _
  4119.          ERL = 11706) THEN _
  4120.          PRINT CONFIG.FILENAME$ + _
  4121.                " from a version earlier than " + CONFIG.VERSION$ + " on default drive." : _
  4122.          PRINT "Please delete and rerun CONFIG." : _
  4123.          RESUME 60340
  4124.       IF ERL = 15780 AND ERR = 5 AND _
  4125.          INSTR(USER.INIT.COMMAND$,"S0=") = 0 THEN _
  4126.          RESUME 16073
  4127.       IF ERL = 22340 THEN _                                          ' KG073103
  4128.          RESUME 22342                                                ' KG073103
  4129.       IF ERL = 31000 AND ERR = 58 THEN _
  4130.          KILL A$ : _
  4131.          RESUME 31000
  4132.       IF ERL = 31030 AND ERR = 58 THEN _
  4133.          KILL A$ : _
  4134.          RESUME 31030
  4135.       IF ERL = 22120 AND ERR = 6 THEN _
  4136.          RESUME 22100
  4137.       IF ERL = 24750 AND ERR = 58 THEN _
  4138.          KILL A$ : _
  4139.          RESUME 24750
  4140.       IF ERL = 31020 THEN _
  4141.          PRINT "Unable to kill ";MAIN.MESSAGE.FILE$;".  Error";STR$(ERR):_
  4142.          RESUME 31035
  4143.       IF ERL = 50490 AND ERR = 58 THEN  _
  4144.          RESUME 50500
  4145.       IF ERL = 50540 AND ERR = 58 THEN  _
  4146.          RESUME 50550
  4147.       IF ERL = 50490 OR ERL = 50540 THEN _
  4148.          RESUME 15230
  4149.       IF ERL = 60471 THEN _
  4150.          IF ERR <> 76 THEN _
  4151.             RESUME 60478 _
  4152.          ELSE RESUME 60474
  4153.       IF ERL = 60480 THEN _
  4154.          PRINT "ERROR -";ERR;" UNABLE TO CREATE SUBDIRECTORY" : _
  4155.          RESUME 60478
  4156.       IF ERR = 61 THEN _
  4157.          PRINT "ERROR - IBM DOS DISKETTE FULL " : _
  4158.          RESUME 60340
  4159.       IF ERR = 67 THEN _
  4160.          PRINT "ERROR - IBM DOS DIRECTORY FULL" : _
  4161.          RESUME 60340
  4162.       IF ERR = 70 THEN _
  4163.          PRINT "DISKETTE IN DRIVE IS WRITE PROTECTED" : _
  4164.          RESUME 60340
  4165.       IF ERR = 71 THEN _
  4166.          PRINT "DRIVE DOOR OPEN OR MISSING DISKETTE"  : _
  4167.          RESUME 60340
  4168.       IF ERR = 72 THEN _
  4169.          PRINT "ERROR - UNFORMATTED IBM DOS DISKETTE IN DRIVE" : _
  4170.          RESUME 60340
  4171.       PRINT "+++ Error";ERR;" in line ";ERL "occurred at " TIME$ " on " DATE$
  4172. 60340 IF CONFERENCE.MODE = 1 THEN _
  4173.          DELAY! = FNTI! + 5
  4174.       GOSUB 60440
  4175. 60360 SYSTEM
  4176. '
  4177. ' * COMMON SUBROUTINE TO BEEP AT THE SYSOP
  4178. '
  4179. 60380 FOR I = 1 TO 2
  4180.         BEEP
  4181.       NEXT
  4182.       RETURN
  4183. '
  4184. ' * COMMON ROUTINE TO WAIT A SPECIFIED NUMBER OF SECONDS
  4185. '
  4186. 60440 ' wait routine
  4187. 60450 IF FNTI! < DELAY! THEN _
  4188.          GOTO 60450
  4189.       RETURN
  4190. '
  4191. ' * COMMON ROUTINE TO CHECK DRIVE/PATH FOR FORMAT/EXISTENCE
  4192. '
  4193. 60470 IF LEN(STRNG$) < 1 THEN _
  4194.          GOTO 60476
  4195.       IS.OK = TRUE
  4196. 60471 NAME STRNG$ + "XX" AS STRNG$ + "XX"
  4197. 60474 BEEP
  4198.       CALL ASKRO ("Bad/missing drive/path <"+STRNG$+">  [R]e-enter, I)gnore, C)reate",24,ANS$)
  4199.       CALL ALLCAPS (ANS$)
  4200.       ON INSTR("RIC",ANS$) GOTO 60476,60478,60480
  4201. 60476 IS.OK = FALSE
  4202. 60478 RETURN
  4203. 60480 MKDIR LEFT$(STRNG$,LEN(STRNG$)-1)
  4204.       RETURN
  4205.